/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.dwdesign.tweetings.preference;
import static android.text.TextUtils.isEmpty;
import twitter4j.Location;
import com.dwdesign.tweetings.R;
import com.dwdesign.tweetings.Constants;
import android.app.AlertDialog.Builder;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.DialogInterface.OnClickListener;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.media.RingtoneManager;
import android.net.Uri;
import android.preference.ListPreference;
import android.provider.MediaStore.Audio;
import android.util.AttributeSet;
public class RingtonePreference extends ListPreference implements Constants {
private int mSelectedItem;
private final Context mContext;
private final ContentResolver mResolver;
private final String[] mEntries, mValues;
private MediaPlayer mMediaPlayer;
public RingtonePreference(final Context context, final AttributeSet attrs) {
super(context, attrs);
mContext = context;
SharedPreferences preferences = mContext.getSharedPreferences(SHARED_PREFERENCES_NAME, mContext.MODE_PRIVATE);
String defaultUri = preferences.getString(getKey(), "");
mResolver = context.getContentResolver();
final String[] cols = new String[] { Audio.Media.DATA, Audio.Media.TITLE };
final Cursor cur = mResolver.query(Audio.Media.INTERNAL_CONTENT_URI, cols, Audio.Media.IS_NOTIFICATION + " = "
+ 1, null, Audio.Media.DEFAULT_SORT_ORDER);
cur.moveToFirst();
final int count = cur.getCount();
mEntries = new String[count + 2];
mValues = new String[count + 2];
mEntries[0] = context.getString(R.string.tweetings_ringtone);
mValues[0] = Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.notify).toString();
mEntries[1] = context.getString(R.string.default_ringtone);
mValues[1] = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION).toString();
if (defaultUri.equals(mValues[1])) {
mSelectedItem = 1;
}
final int data_idx = cur.getColumnIndex(Audio.Media.DATA), title_idx = cur.getColumnIndex(Audio.Media.TITLE);
while (!cur.isAfterLast()) {
final int pos = cur.getPosition() + 2;
mEntries[pos] = cur.getString(title_idx);
mValues[pos] = cur.getString(data_idx);
if (defaultUri.equals(mValues[pos])) {
mSelectedItem = pos;
}
cur.moveToNext();
}
cur.close();
setEntries(mEntries);
setEntryValues(mValues);
}
public int getItem() {
return mSelectedItem;
}
public void setItem(final int selected) {
mSelectedItem = selected;
}
@Override
protected void onDialogClosed(final boolean positiveResult) {
if (mMediaPlayer != null) {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
}
mMediaPlayer.release();
mMediaPlayer = null;
}
if (positiveResult) {
final SharedPreferences.Editor editor = getEditor();
if (editor == null) return;
String uri = mValues[mSelectedItem];
if (uri != null) {
editor.putString(getKey(), uri);
editor.commit();
}
callChangeListener(mSelectedItem);
}
}
@Override
protected void onPrepareDialogBuilder(final Builder builder) {
builder.setSingleChoiceItems(getEntries(), mSelectedItem, new OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, final int which) {
mSelectedItem = which;
if (mMediaPlayer != null) {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
}
mMediaPlayer.release();
}
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setLooping(false);
final String ringtone = mValues[mSelectedItem];
final Uri def_uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
final Uri uri = isEmpty(ringtone) ? def_uri : Uri.parse(ringtone);
try {
mMediaPlayer.setDataSource(mContext, uri);
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (final Exception e) {
e.printStackTrace();
}
}
});
}
}