непонятки с RingtonePreference
Добавлено: 13 мар 2012, 13:01
здравствуйте.
помогите пожалуйста решить такую проблему.
в моем PreferenceActivity есть RingtonePreference и вся беда в том, что он не вызывает свой onPreferenceChange после выбора рингтона.
полазил я по StackOverflow, пишут что это стандартная бага android
скачал я исходники lithium-alarming, там у него создан свой клас, унаследованый от rintonepreference
скомпилил его исходники-всё работает
скопировал всё себе, буквально уже точь в точь- не вызывает всеровно
уже в своем RingtonePref переопределил onActivityResult и всунул в корень команду записи в лог. Даже onActivityResult не вызывается!
самое главное у него то всё работает!
xml этого RingtonePref
сам RingtonePref
в активити
поудалял всё лишнее чтобы не мешало
может я что-то упустил?
есть хоть какието соображения?
помогите пожалуйста решить такую проблему.
в моем PreferenceActivity есть RingtonePreference и вся беда в том, что он не вызывает свой onPreferenceChange после выбора рингтона.
полазил я по StackOverflow, пишут что это стандартная бага android
скачал я исходники lithium-alarming, там у него создан свой клас, унаследованый от rintonepreference
скомпилил его исходники-всё работает
скопировал всё себе, буквально уже точь в точь- не вызывает всеровно
уже в своем RingtonePref переопределил onActivityResult и всунул в корень команду записи в лог. Даже onActivityResult не вызывается!
самое главное у него то всё работает!
xml этого RingtonePref
Код: Выделить всё
<ui.app.RingtonePref
android:key="@string/key_notif_ringtone"
android:ringtoneType="alarm"
android:showDefault="false"
android:showSilent="false"
android:title="@string/notif_ringtone" />
Код: Выделить всё
/**
*
*/
package ui.app;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.preference.RingtonePreference;
import android.util.AttributeSet;
public class RingtonePref extends RingtonePreference {
public Uri mAlert;
private IRingtoneChangedListener mRingtoneChangedListener;
public interface IRingtoneChangedListener {
public void onRingtoneChanged(Uri ringtoneUri);
};
public RingtonePref(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setRingtoneChangedListener(IRingtoneChangedListener listener) {
mRingtoneChangedListener = listener;
}
@Override
protected void onSaveRingtone(Uri ringtoneUri) {
LogManager.v("И тут естественно");
if (ringtoneUri != null) {
mAlert = ringtoneUri;
if (mRingtoneChangedListener != null) {
mRingtoneChangedListener.onRingtoneChanged(ringtoneUri);
}
}
}
@Override
protected Uri onRestoreRingtone() {
return mAlert;
}
@Override
public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
LogManager.v("Даже это не вызывается");
return super.onActivityResult(requestCode, resultCode, data);
}
}
Код: Выделить всё
/**
*
*/
package ui.app;
import sumy.sneg.ShiftsAndGraffsManager.GraffColumns;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.preference.Preference.OnPreferenceChangeListener;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
/**
*
*
*/
public class PreferenceAct extends PreferenceActivity {
CheckBoxPreference show_icons;
CheckBoxPreference disable_all_notif_pref;
CheckBoxPreference vibra_enabled;
RingtonePref ringtone;
private class RingtoneChangedListener implements RingtonePref.IRingtoneChangedListener {
public void onRingtoneChanged(Uri ringtoneUri) {
LogManager.v("Вызывается онЧенж");
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.main_pereference);
ringtone = (RingtonePref) findPreference(getResources().getString(R.string.key_notif_ringtone));
UpdateOnStart();
ringtone.setRingtoneChangedListener(new RingtoneChangedListener());
show_icons
.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference,
Object newValue) {
if (newValue instanceof Boolean) {
UpdateShowIcons((Boolean) newValue);
}
return true;
}
});
}
private void UpdateOnStart() {
String sound=settings.getString(ringtone.getKey(),null);
if (sound == null || sound.length() == 0) {
if (LogManager.DEBUG) LogManager.v("****** reportAlarm null or 0-length alert");
ringtone.mAlert = getDefaultAlarm();
if (ringtone.mAlert == null) {
LogManager.e("****** Default Alarm null");
}
} else {
ringtone.mAlert = Uri.parse(sound);
if (ringtone.mAlert == null) {
LogManager.e("****** Parsed null alarm. URI: " + sound);
}
}
if (LogManager.DEBUG) LogManager.v("****** reportAlarm uri " + sound + " alert " +ringtone.mAlert);
UpdateRingtone(ringtone.mAlert);
}
private void UpdateRingtone(Uri uri) {
if(uri!=null){
editor.putString(ringtone.getKey(), uri.toString());
editor.commit();
}
if (LogManager.DEBUG) LogManager.v("updateMelody to -" + uri+"-");
Ringtone globalringtone = RingtoneManager.getRingtone(this, uri);
if (globalringtone != null) {
String title=globalringtone.getTitle(this);
if (LogManager.DEBUG) LogManager.v("updateMelody to" + title);
ringtone.setSummary(title);
}
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference) {
if (preference == get_shift_screen) {
Intent i = new Intent(new Intent(this, GraffListPreviewAct.class));
i.putExtra("request", MANAGE_GRAFF);
startActivityForResult(i, MANAGE_GRAFF);
}
if (preference == show_graff_screen) {
Intent i = new Intent(new Intent(this, GraffListPreviewAct.class));
i.putExtra("request", SHOW_GRAFF);
startActivityForResult(i, SHOW_GRAFF);
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
}
может я что-то упустил?
есть хоть какието соображения?