package de.htwdd; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.media.AudioManager; import java.util.ArrayList; import java.util.Calendar; import java.util.GregorianCalendar; import de.htwdd.classes.CONST; import de.htwdd.classes.LessonSearch; import de.htwdd.types.Lesson; public class VolumeController { private AudioManager amanager; private Context context; public VolumeController(Context context) { this.context = context; amanager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); } public int getVolumeChangedStatus() { SharedPreferences sharedPref = context.getSharedPreferences( VolumeControllerService.PREFERENCE_FILE_VOLUME_CTRL, Context.MODE_PRIVATE ); return sharedPref.getInt( VolumeControllerService.PREFERENCE_MODE, VolumeControllerService.PREFERENCE_MODE_CHANGED_SILENT ); } public void setVolumeChangedStatus(final int volumeMode) { SharedPreferences sharedPref = context.getSharedPreferences( VolumeControllerService.PREFERENCE_FILE_VOLUME_CTRL, Context.MODE_PRIVATE ); SharedPreferences.Editor sharedPrefEditor = sharedPref.edit(); //set control "bit" as false -> sound was turned off by our app. // We don't wont to turn sound on , if it was not changed by us sharedPrefEditor.putInt( VolumeControllerService.PREFERENCE_MODE, volumeMode ); sharedPrefEditor.apply(); } /** * Wenn es aktuell eine Vorlesung gibt, wird das Handy stummgeschaltet */ public void turnSoundOff() { // Stundenplan Anbindung DatabaseHandlerTimetable databaseHandlerTimetable = new DatabaseHandlerTimetable(context); // Stunde bestimmen Calendar calendar = GregorianCalendar.getInstance(); int current_time = calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE); int week = calendar.get(Calendar.WEEK_OF_YEAR); int current_ds = CONST.TimetableCalc.getCurrentDS(current_time); // Aktuell Vorlesungszeit?, wenn nein return if (current_ds == 0 && calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) return; ArrayList<Lesson> lessons = databaseHandlerTimetable.getShortDS( week, calendar.get(Calendar.DAY_OF_WEEK) - 1, current_ds ); // Gibt es aktuell eine Lehrveranstaltung?, wenn nein return if (lessons.size() == 0) return; int mode = amanager.getRingerMode(); //if we don't changed the audio mode and it is in silent mode, //volumeStatus stays in Normal mode, so we don't turn it at the end of class if (mode == AudioManager.RINGER_MODE_SILENT) return; //Status-bit setzen setVolumeChangedStatus(VolumeControllerService.PREFERENCE_MODE_CHANGED_SILENT); // // Setze Audio-Ausgabe auf Silent, Setze Benachrichtungsmodus amanager.setRingerMode(AudioManager.RINGER_MODE_SILENT); //Log.i("turnSoundOff","trying to set turnoffAlarm new"); //SETTING THE TURNON ALARM UP. Turn sound on after the class(+90min) AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Calendar calendar2 = VolumeControllerService.setCalendar(LessonSearch.lessonEndTimes[current_ds-1]); Intent intent2 = VolumeControllerService.getIntentSoundSwitch(context, "turnSoundOn", calendar2); PendingIntent pendingIntent2 = PendingIntent.getService(context, current_ds-1 + LessonSearch.lessonStartTimes.length, intent2, PendingIntent.FLAG_UPDATE_CURRENT); alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar2.getTimeInMillis(), pendingIntent2); } /** * Schaltet das Handy wieder in den Normalen-Modus */ public void turnSoundOn() { //Log.i("turnSoundOn","Entered"); //LOAD, DID WE CHANGE VOLUME MODE OR NOT int mode = getVolumeChangedStatus(); //if we didn't change the audio mode, we don't have to change it back to normal if (mode == VolumeControllerService.PREFERENCE_MODE_DEFAULT_NORMAL) return; //control bit set to default value (FROM 1:SILENT MODE TO -> 0: NORMAL MODE). setVolumeChangedStatus(VolumeControllerService.PREFERENCE_MODE_DEFAULT_NORMAL); // Stellt den normalen Benachrichtungsmodus wieder ein. amanager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); } }