| /* |
| * Copyright (C) 2015 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.messaging.datamodel.data; |
| |
| import android.content.Context; |
| import android.database.Cursor; |
| import android.media.Ringtone; |
| import android.media.RingtoneManager; |
| import android.net.Uri; |
| |
| import com.android.messaging.R; |
| import com.android.messaging.datamodel.data.ConversationListItemData.ConversationListViewColumns; |
| import com.android.messaging.util.Assert; |
| import com.android.messaging.util.RingtoneUtil; |
| |
| public class PeopleOptionsItemData { |
| public static final String[] PROJECTION = { |
| ConversationListViewColumns.NOTIFICATION_ENABLED, |
| ConversationListViewColumns.NOTIFICATION_SOUND_URI, |
| ConversationListViewColumns.NOTIFICATION_VIBRATION, |
| }; |
| |
| // Column index for query projection. |
| private static final int INDEX_NOTIFICATION_ENABLED = 0; |
| private static final int INDEX_NOTIFICATION_SOUND_URI = 1; |
| private static final int INDEX_NOTIFICATION_VIBRATION = 2; |
| |
| // Identification for each setting that's surfaced to the UI layer. |
| public static final int SETTING_NOTIFICATION_ENABLED = 0; |
| public static final int SETTING_NOTIFICATION_SOUND_URI = 1; |
| public static final int SETTING_NOTIFICATION_VIBRATION = 2; |
| public static final int SETTING_BLOCKED = 3; |
| public static final int SETTINGS_COUNT = 4; |
| |
| // Type of UI switch to show for the toggle button. |
| public static final int TOGGLE_TYPE_CHECKBOX = 0; |
| public static final int TOGGLE_TYPE_SWITCH = 1; |
| |
| private String mTitle; |
| private String mSubtitle; |
| private Uri mRingtoneUri; |
| private boolean mCheckable; |
| private boolean mChecked; |
| private boolean mEnabled; |
| private int mItemId; |
| private ParticipantData mOtherParticipant; |
| |
| private final Context mContext; |
| |
| public PeopleOptionsItemData(final Context context) { |
| mContext = context; |
| } |
| |
| /** |
| * Bind to a specific setting column on conversation metadata cursor. (Note |
| * that it binds to columns because it treats individual columns of the cursor as |
| * separate options to display for the conversation, e.g. notification settings). |
| */ |
| public void bind( |
| final Cursor cursor, final ParticipantData otherParticipant, final int settingType) { |
| mSubtitle = null; |
| mRingtoneUri = null; |
| mCheckable = true; |
| mEnabled = true; |
| mItemId = settingType; |
| mOtherParticipant = otherParticipant; |
| |
| final boolean notificationEnabled = cursor.getInt(INDEX_NOTIFICATION_ENABLED) == 1; |
| switch (settingType) { |
| case SETTING_NOTIFICATION_ENABLED: |
| mTitle = mContext.getString(R.string.notifications_enabled_conversation_pref_title); |
| mChecked = notificationEnabled; |
| break; |
| |
| case SETTING_NOTIFICATION_SOUND_URI: |
| mTitle = mContext.getString(R.string.notification_sound_pref_title); |
| final String ringtoneString = cursor.getString(INDEX_NOTIFICATION_SOUND_URI); |
| Uri ringtoneUri = RingtoneUtil.getNotificationRingtoneUri(ringtoneString); |
| |
| mSubtitle = mContext.getString(R.string.silent_ringtone); |
| if (ringtoneUri != null) { |
| final Ringtone ringtone = RingtoneManager.getRingtone(mContext, ringtoneUri); |
| if (ringtone != null) { |
| mSubtitle = ringtone.getTitle(mContext); |
| } |
| } |
| mCheckable = false; |
| mRingtoneUri = ringtoneUri; |
| mEnabled = notificationEnabled; |
| break; |
| |
| case SETTING_NOTIFICATION_VIBRATION: |
| mTitle = mContext.getString(R.string.notification_vibrate_pref_title); |
| mChecked = cursor.getInt(INDEX_NOTIFICATION_VIBRATION) == 1; |
| mEnabled = notificationEnabled; |
| break; |
| |
| case SETTING_BLOCKED: |
| Assert.notNull(otherParticipant); |
| final int resourceId = otherParticipant.isBlocked() ? |
| R.string.unblock_contact_title : R.string.block_contact_title; |
| mTitle = mContext.getString(resourceId, otherParticipant.getDisplayDestination()); |
| mCheckable = false; |
| break; |
| |
| default: |
| Assert.fail("Unsupported conversation option type!"); |
| } |
| } |
| |
| public String getTitle() { |
| return mTitle; |
| } |
| |
| public String getSubtitle() { |
| return mSubtitle; |
| } |
| |
| public boolean getCheckable() { |
| return mCheckable; |
| } |
| |
| public boolean getChecked() { |
| return mChecked; |
| } |
| |
| public boolean getEnabled() { |
| return mEnabled; |
| } |
| |
| public int getItemId() { |
| return mItemId; |
| } |
| |
| public Uri getRingtoneUri() { |
| return mRingtoneUri; |
| } |
| |
| public ParticipantData getOtherParticipant() { |
| return mOtherParticipant; |
| } |
| } |