blob: 59183e67d68c89feabb360d537d8dde5d7aacb83 [file] [log] [blame]
/**
* Copyright (C) 2008 Esmertec AG.
* 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.android.im.app;
import com.android.im.provider.Imps;
import com.android.im.service.ImServiceConstants;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.preference.RingtonePreference;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
/**
* RingtonePreference subclass to save/restore ringtone value from ImProvider.
*/
public class ImRingtonePreference extends RingtonePreference {
private long mProviderId;
public ImRingtonePreference(Context context, AttributeSet attrs) {
super(context, attrs);
Intent intent = ((Activity)context).getIntent();
mProviderId = intent.getLongExtra(ImServiceConstants.EXTRA_INTENT_PROVIDER_ID, -1);
if (mProviderId < 0) {
Log.e(ImApp.LOG_TAG,"ImRingtonePreference intent requires provider id extra");
throw new RuntimeException("ImRingtonePreference must be created with an provider id");
}
}
@Override
protected Uri onRestoreRingtone() {
final Imps.ProviderSettings.QueryMap settings = new Imps.ProviderSettings.QueryMap(
getContext().getContentResolver(), mProviderId,
false /* keep updated */, null /* no handler */);
String uri = settings.getRingtoneURI();
if (Log.isLoggable(ImApp.LOG_TAG, Log.VERBOSE)) {
Log.v(ImApp.LOG_TAG, "onRestoreRingtone() finds uri=" + uri + " key=" + getKey());
}
if (TextUtils.isEmpty(uri)) {
return null;
}
Uri result = Uri.parse(uri);
settings.close();
return result;
}
@Override
protected void onSaveRingtone(Uri ringtoneUri) {
final Imps.ProviderSettings.QueryMap settings = new Imps.ProviderSettings.QueryMap(
getContext().getContentResolver(), mProviderId,
false /* keep updated */, null /* no handler */);
// When ringtoneUri is null, that means 'Silent' was chosen
settings.setRingtoneURI(ringtoneUri == null ? "" : ringtoneUri.toString());
settings.close();
}
}