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.io.IOException; import java.util.Calendar; import org.hansel.myAlert.Log.Log; import org.hansel.myAlert.Utils.Util; import org.hansel.myAlert.dataBase.UsuarioDAO; import android.app.Activity; import android.app.AlarmManager; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Vibrator; import android.support.v4.app.DialogFragment; import android.text.InputType; import android.view.WindowManager.LayoutParams; import android.widget.EditText; import android.widget.Toast; public class AlarmFragment extends DialogFragment { @Override public void onDestroy() { super.onDestroy(); try { if(mMediaPlayer.isPlaying()) mMediaPlayer.stop(); } catch (Exception e) { // TODO: handle exception } mVibrator.cancel(); handler.removeCallbacks(stop); } private AlarmManager alarmManager; private UsuarioDAO usuarioDao; private MediaPlayer mMediaPlayer; private Vibrator mVibrator; //handler para quitar la vibraci�n en caso que no se apague la alarma private Handler handler = new Handler(); private Runnable stop= new Runnable() { @Override public void run() { if(mVibrator!=null) { mVibrator.cancel(); } if(mMediaPlayer!=null) { mMediaPlayer.stop(); } } }; private void Vibra() { int dot = 200; // Length of a Morse Code "dot" in milliseconds int dash = 500; // Length of a Morse Code "dash" in milliseconds int short_gap = 200; // Length of Gap Between dots/dashes int medium_gap = 500; // Length of Gap Between Letters int long_gap = 1000; // Length of Gap Between Words long[] pattern = { 0, // Start immediately dot, short_gap, dot, short_gap, dot, // s medium_gap, dash, short_gap, dash, short_gap, dash, // o medium_gap, dot, short_gap, dot, short_gap, dot, // s long_gap }; mVibrator.vibrate(pattern,0); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { getActivity().getWindow().addFlags(LayoutParams.FLAG_TURN_SCREEN_ON | LayoutParams.FLAG_DISMISS_KEYGUARD); mVibrator = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE); alarmManager = (AlarmManager) getActivity().getSystemService(Activity.ALARM_SERVICE); usuarioDao = new UsuarioDAO(getActivity().getApplicationContext()); usuarioDao.open(); setAlarm(); Vibra(); // tocamos la alarma: String _uri = Util.getRingtone(getActivity().getApplicationContext()); if(_uri!=null && _uri.length()>0) { //handler.post(vibrate); playSound(getActivity().getApplicationContext(), Uri.parse(_uri)); } //preparamos handler para terminar alarma; handler.postDelayed(stop, 1000*60*2); 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; } }*/ if(usuarioDao.getPassword(value.trim())) //buscar en la BD la contrase�a { Log.v("Detener Rastreo"); getActivity().stopService(new Intent(getActivity().getApplicationContext() ,LocationManagement.class)); alarmManager.cancel(Util.getPendingAlarmPanicButton(getActivity().getApplicationContext())); Toast.makeText(getActivity(), "Rastreo Detenido", Toast.LENGTH_SHORT).show(); getActivity().finish(); return; }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) { getActivity().finish(); return; } }); return alert.create(); } private void setAlarm() { Calendar cal = Calendar.getInstance(); cal.add(Calendar.MINUTE, Util.getPanicDelay(getActivity().getApplicationContext())); alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), Util.getPendingAlarmPanicButton(getActivity().getApplicationContext())); } private void playSound(Context context, Uri alert) { mMediaPlayer = new MediaPlayer(); try { mMediaPlayer.setDataSource(context, alert); final AudioManager audioManager = (AudioManager) context .getSystemService(Context.AUDIO_SERVICE); if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) { mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); mMediaPlayer.prepare(); mMediaPlayer.start(); } } catch (IOException e) { System.out.println("Error tocando alarma"); } } }