package org.hansel.myAlert;
/*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/>.
Created by Javier Mejia @zenyagami
zenyagami@gmail.com
*/
import java.util.Calendar;
import java.util.Date;
import org.hansel.myAlert.Log.Log;
import org.hansel.myAlert.Utils.PreferenciasHancel;
import org.hansel.myAlert.Utils.Util;
import org.hansel.myAlert.dataBase.TrackDAO;
import org.hansel.myAlert.dataBase.UsuarioDAO;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.InputType;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import org.hancel.adapters.customUi.TrackDialog;
import org.hancel.customclass.TrackDate;
public class Rastreo extends Fragment implements OnClickListener{
private boolean corriendo=false;
private int minutos;
private static final String START_TRACK = "Programar Rastreo";
private static final String STOP_TRACK = "Detener";
private static final int RQS_1 = 12;
private Button btnTracking;
private UsuarioDAO usuarioDao;
// private TimePickerDialog timePickerDialog;
private AlarmManager alarmManager;
private TrackDAO track;
private final int REQUEST_CODE = 0;
private View currentTrackInfo;
private TextView txtCurrentTrackInfo;
private TrackDate trackDate;
//private boolean okButtonPressed;
private Button btnCancelCurrentTrack;
private Button btnModifyCurrentTrack;
public boolean isTracking()
{
return corriendo;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
alarmManager = (AlarmManager)getActivity().getSystemService(Activity.ALARM_SERVICE);
track = new TrackDAO(getActivity().getApplicationContext());
track.open();
}
private void showCurrentTrackInfo(boolean showTrackInfo)
{
currentTrackInfo.setVisibility(showTrackInfo ? View.VISIBLE : View.GONE );
btnTracking.setVisibility(showTrackInfo? View.GONE : View.VISIBLE);
}
public void panicButtonPressed()
{
//se presiona bot�n de panico, cancelamos "servicio" si aun no esta corriendo y cancelamos la alarma
showCurrentTrackInfo(false);
//cancelamos la alarma antes de ejecutar el servicio por el bot�n de p�nico
//si esta corriendo es que corri� por causa de la alarma
if(!Util.isMyServiceRunning(getActivity()))
{
alarmManager.cancel(Util.getServicePendingIntent(getActivity()));
}
//corriendo siempre ser� "true" por que al presionar el bot�n de p�nico
// se inizializa el servicio
corriendo=true;
setupButtonText();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode==REQUEST_CODE && resultCode== Activity.RESULT_OK && data!=null)
{
/*
//cancelamos la alarma anterios en caso que se modificque
alarmManager.cancel(Util.getServicePendingIntent(getActivity()));
//obtenemos data para poder iniciar el rastreo:
trackDate = (TrackDate) data.getExtras().get(TrackDialog.TRACK_EXTRA);
//mostramos Botones De info
setAlarm(trackDate.getEndTimeTrack());
showCurrentTrackInfo(true);
txtCurrentTrackInfo.setText(Util.getSimpleDateFormatTrack(trackDate.getStartDateTrack()) );
//alarma para iniciar el servicio de "recordatorio"
alarmManager.set(AlarmManager.RTC_WAKEUP, trackDate.getStartTimeTrack().getTimeInMillis(), Util.getServicePendingIntent(getActivity()));
*/
cancelAlarms();
PreferenciasHancel.setReminderCount(getActivity(), 0);
trackDate = (TrackDate) data.getExtras().get(TrackDialog.TRACK_EXTRA);
alarmManager.set(AlarmManager.RTC_WAKEUP, trackDate.getStartTimeTrack().getTimeInMillis(), Util.getReminderPendingIntennt(getActivity()));
Log.v("Finalizando en: "+ new Date(trackDate.getEndTimeTrack().getTimeInMillis()) );
alarmManager.set(AlarmManager.RTC_WAKEUP, trackDate.getEndTimeTrack().getTimeInMillis(), Util.getStopSchedulePendingIntentWithExtra(getActivity()));
//guardamos inicio de alarma
PreferenciasHancel.setAlarmStartDate(getActivity(), trackDate.getEndTimeTrack().getTimeInMillis());
showCurrentTrackInfo(true);
txtCurrentTrackInfo.setText(Util.getSimpleDateFormatTrack(trackDate.getStartTimeTrack()) );
}else
{
super.onActivityResult(requestCode, resultCode, data);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_rastreo, container,false);
btnTracking = (Button)v.findViewById(R.id.IniciaTrackId);
usuarioDao=new UsuarioDAO(getActivity().getApplicationContext());
usuarioDao.open();
//convertimos a entero el valor
minutos = Util.getTrackingMinutes(getActivity().getApplicationContext());
//minutos =4;
//Layouts para ocultar o mostrar dependiendo de la alerta
currentTrackInfo = v.findViewById(R.id.layoutCurrentTrack);
txtCurrentTrackInfo = (TextView)v.findViewById(R.id.txtUltimaAlerta);
btnCancelCurrentTrack = (Button)v.findViewById(R.id.btnCancelCurrentTrack);
btnModifyCurrentTrack = (Button)v.findViewById(R.id.btnModifyCurrentTrack);
btnCancelCurrentTrack.setOnClickListener(this);
btnModifyCurrentTrack.setOnClickListener(this);
showCurrentTrackInfo(false);
Log.v("Buscando el tiempo por defecto para actualizar: "+minutos);
if(savedInstanceState!=null)
{
corriendo = savedInstanceState.getBoolean("run");
if(corriendo)
{
btnTracking.setText(STOP_TRACK);
}else
{
btnTracking.setText(START_TRACK);
}
}
btnTracking.setOnClickListener(this);
return v;
}
private PendingIntent getPendingAlarm()
{
Intent intent = new Intent(getActivity().getApplicationContext()
, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getActivity(getActivity(), RQS_1, intent, PendingIntent.FLAG_CANCEL_CURRENT);
return pendingIntent;
}
@Override
public void onResume() {
super.onResume();
long time = PreferenciasHancel.getAlarmStartDate(getActivity());
if(time!=0)
{
Calendar currentTime = Calendar.getInstance();
Calendar alarmTime = Calendar.getInstance();
alarmTime.setTimeInMillis(time);
//comparamos la fecha para saber si ya esta corriendo la alarma
if(alarmTime.compareTo(currentTime)!=-1) //-1 si es antes aun podemos modificar la alarma
{
showCurrentTrackInfo(true);
}
txtCurrentTrackInfo.setText(Util.getSimpleDateFormatTrack(alarmTime) );
}
corriendo =Util.isMyServiceRunning(getActivity().getApplicationContext());
setupButtonText();
}
private void setupButtonText() {
if(corriendo)
{
showCurrentTrackInfo(false);
btnTracking.setText(STOP_TRACK);
}else
{
btnTracking.setText(START_TRACK);
}
}
protected void createPasswordDialog(final Button btnPanico) {
AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
alert.setTitle("Contrase�a para cancelar...");
alert.setMessage("Contrase�a:");
// Set an EditText view to get user input
final EditText input = new EditText(getActivity());
input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
//encriptamos el password y lo comparamos con el guardado
/* String hash = SimpleCrypto.md5(SimpleCrypto.MD5_KEY);
if(hash.length()>0)
{
String encrypted= SimpleCrypto.encrypt(value, hash);
if(encrypted.length()>0)
{
value = encrypted;
}
}*/
boolean isOK = usuarioDao.getPassword(value.trim());
if(isOK && btnPanico.getId()== R.id.IniciaTrackId ) //buscar en la BD la contrase�a
{
Log.v("Detener Rastreo");
alarmManager.cancel(getPendingAlarm());
btnPanico.setText(START_TRACK);
Util.setRunningService(getActivity().getApplicationContext(), false);
getActivity().stopService(new Intent(getActivity().getApplicationContext()
,LocationManagement.class));
alarmManager.cancel(Util.getPendingAlarmPanicButton(getActivity().getApplicationContext()));
corriendo=false;
Toast.makeText(getActivity(), "Rastreo Detenido", Toast.LENGTH_SHORT).show();
PreferenciasHancel.setAlarmStartDate(getActivity(), 0);
return;
}else if(isOK && btnPanico.getId() == R.id.btnCancelCurrentTrack )
{
//cancelamos alarma para iniciar servicio
//alarmManager.cancel(Util.getServicePendingIntent (getActivity()));
cancelAlarms();
Toast.makeText(getActivity(), "Programaci�n de Rastreo Cancelado", Toast.LENGTH_SHORT).show();
showCurrentTrackInfo(false);
PreferenciasHancel.setAlarmStartDate(getActivity(), 0);
}else if(isOK && btnPanico.getId()==R.id.btnModifyCurrentTrack)
{
startActivityForResult(new Intent(getActivity(), TrackDialog.class),REQUEST_CODE );
}
else
{
Toast.makeText(getActivity(), "Contrase�a Incorrecta",
Toast.LENGTH_SHORT).show();
return;
}
}
});
alert.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
return;
}
});
alert.show();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if(outState!=null)
{
outState.putBoolean("run", corriendo);
}
}
@Override
public void onDestroy() {
super.onDestroy();
try {
if(track!=null)
{
track.close();
}
} catch (Exception e) {
}
}
@Override
public void onClick(View v) {
//Permite arreglar el bug al no ser notificada esta actividad de que el servicio ya esta en ejecucion,
//Si el servicio se inicio y automaticamente se detuvo, esto permite detenerlo
if (btnTracking.getText() == STOP_TRACK) {
createPasswordDialog(btnTracking);
return;
}
switch (v.getId()) {
case R.id.btnCancelCurrentTrack:
//cancelamos alarma para iniciar servicio
//alarmManager.cancel(Util.getServicePendingIntent (getActivity()));
/*cancelAlarms();
Toast.makeText(getActivity(), "Programaci�n de Rastreo Cancelado", Toast.LENGTH_SHORT).show();
showCurrentTrackInfo(false);
PreferenciasHancel.setAlarmStartDate(getActivity(), 0);*/
//break;
case R.id.btnModifyCurrentTrack:
createPasswordDialog((Button) v);
//startActivityForResult(new Intent(getActivity(), TrackDialog.class),REQUEST_CODE );
break;
case R.id.IniciaTrackId:
if(!corriendo)
{
startActivityForResult(new Intent(getActivity(), TrackDialog.class),REQUEST_CODE );
}else
{
//si detenemos rastreo iniciamos un dialogo pidiendo password:
createPasswordDialog(btnTracking);
}
break;
default:
break;
}
}
private void cancelAlarms() {
alarmManager.cancel(Util.getReminderPendingIntennt(getActivity()));
alarmManager.cancel(Util.getStopSchedulePendingIntentWithExtra(getActivity()));
}
}