/* * * Copyright (c) Microsoft. All rights reserved. * Licensed under the MIT license. * * Project Oxford: http://ProjectOxford.ai * * Project Oxford Mimicker Alarm Github: * https://github.com/Microsoft/ProjectOxford-Apps-MimickerAlarm * * Copyright (c) Microsoft Corporation * All rights reserved. * * MIT License: * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * */ package com.microsoft.mimickeralarm.ringing; import android.content.Context; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; import com.microsoft.mimickeralarm.utilities.Logger; /** * A simple utility class to wrap the system media player. This class is utilized by the * AlarmRingingController. */ public class AlarmRingtonePlayer { private MediaPlayer mPlayer; private Context mContext; public AlarmRingtonePlayer(Context context) { mContext = context; } public void initialize() { try { mPlayer = new MediaPlayer(); } catch (Exception e) { Logger.trackException(e); } } public void cleanup() { if (mPlayer != null) { mPlayer.release(); mPlayer = null; } } public void play(Uri toneUri) { try { if (mPlayer != null && !mPlayer.isPlaying()) { mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mp.start(); } }); mPlayer.setDataSource(mContext, toneUri); mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); mPlayer.setLooping(true); mPlayer.prepareAsync(); } } catch (Exception e) { Logger.trackException(e); } } public void stop() { if (mPlayer != null) { if (mPlayer.isPlaying()) { mPlayer.stop(); } mPlayer.reset(); } } }