| /* |
| * Copyright (C) 2007-2008 Esmertec AG. |
| * Copyright (C) 2007-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 android.content.Intent; |
| import android.os.Bundle; |
| import android.preference.Preference; |
| import android.preference.PreferenceScreen; |
| import android.preference.CheckBoxPreference; |
| import android.util.Log; |
| |
| import com.android.im.R; |
| import com.android.im.provider.Imps; |
| import com.android.im.service.ImServiceConstants; |
| |
| public class SettingActivity extends android.preference.PreferenceActivity { |
| private static final String KEY_NOTIFICATION_SOUND = "notification-sound"; |
| private static final String KEY_NOTIFICATION_VIBRATE = "notification-vibrate"; |
| private static final String KEY_ENABLE_NOTIFICATIONS = "enable-notifications"; |
| private static final String KEY_HIDE_OFFLINE_CONTACTS = "hide-offline-contacts"; |
| |
| private long mProviderId; |
| |
| @Override |
| public void onCreate(Bundle icicle) { |
| super.onCreate(icicle); |
| addPreferencesFromResource(R.xml.preferences); |
| Intent intent = getIntent(); |
| mProviderId = intent.getLongExtra(ImServiceConstants.EXTRA_INTENT_PROVIDER_ID, -1); |
| if (mProviderId < 0) { |
| Log.e(ImApp.LOG_TAG,"SettingActivity intent requires provider id extra"); |
| throw new RuntimeException("SettingActivity must be created with an provider id"); |
| } |
| setInitialValues(); |
| } |
| |
| private void setInitialValues() { |
| Imps.ProviderSettings.QueryMap settings = new Imps.ProviderSettings.QueryMap( |
| getContentResolver(), mProviderId, |
| false /* keep updated */, null /* no handler */); |
| |
| CheckBoxPreference pref = (CheckBoxPreference) findPreference(KEY_HIDE_OFFLINE_CONTACTS); |
| pref.setChecked(settings.getHideOfflineContacts()); |
| |
| pref = (CheckBoxPreference) findPreference(KEY_ENABLE_NOTIFICATIONS); |
| pref.setChecked(settings.getEnableNotification()); |
| |
| pref = (CheckBoxPreference) findPreference(KEY_NOTIFICATION_VIBRATE); |
| pref.setChecked(settings.getVibrate()); |
| |
| pref = (CheckBoxPreference) findPreference(KEY_NOTIFICATION_SOUND); |
| pref.setChecked(settings.getRingtoneURI() != null); |
| settings.close(); |
| } |
| |
| @Override |
| public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { |
| if (preference instanceof CheckBoxPreference) { |
| final Imps.ProviderSettings.QueryMap settings = new Imps.ProviderSettings.QueryMap( |
| getContentResolver(), mProviderId, |
| false /* keep updated */, null /* no handler */); |
| String key = preference.getKey(); |
| boolean value = ((CheckBoxPreference) preference).isChecked(); |
| |
| if (key.equals(KEY_HIDE_OFFLINE_CONTACTS)) { |
| settings.setHideOfflineContacts(value); |
| } else if (key.equals(KEY_ENABLE_NOTIFICATIONS)) { |
| settings.setEnableNotification(value); |
| } else if (key.equals(KEY_NOTIFICATION_VIBRATE)) { |
| settings.setVibrate(value); |
| } else if (key.equals(KEY_NOTIFICATION_SOUND)){ |
| if (!value) { |
| settings.setRingtoneURI(null); |
| } |
| } |
| settings.close(); |
| return true; |
| } |
| |
| return false; |
| } |
| } |