FileDocCategorySizeDatePackage
ImRingtonePreference.javaAPI DocAndroid 1.5 API2861Wed May 06 22:42:46 BST 2009com.android.im.app

ImRingtonePreference.java

/**
 * 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.service.ImServiceConstants;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.preference.RingtonePreference;
import android.provider.Im;
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 Im.ProviderSettings.QueryMap settings = new Im.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 Im.ProviderSettings.QueryMap settings = new Im.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();
    }
}