blob: 2c6142a67027c208072be3f651dbd4a52fd5c5e7 [file] [log] [blame]
/*
* Copyright (C) 2009 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.contacts;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract.Contacts;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
/**
* An activity for selecting options for a given contact: custom ringtone and send-to-voicemail.
*/
public class ContactOptionsActivity extends Activity implements View.OnClickListener {
private static final String TAG = "ContactOptionsActivity";
private static final String[] AGGREGATES_PROJECTION = new String[] {
Contacts.CUSTOM_RINGTONE, Contacts.SEND_TO_VOICEMAIL
};
private static final int COL_CUSTOM_RINGTONE = 0;
private static final int COL_SEND_TO_VOICEMAIL = 1;
/** The launch code when picking a ringtone */
private static final int RINGTONE_PICKED = 3023;
private String mCustomRingtone;
private boolean mSendToVoicemail;
private TextView mRingtoneTitle;
private CheckBox mSendToVoicemailCheckbox;
private Uri mLookupUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLookupUri = getIntent().getData();
setContentView(R.layout.contact_options);
View ringtoneLayout = findViewById(R.id.ringtone);
ringtoneLayout.setFocusable(true);
ringtoneLayout.setOnClickListener(this);
TextView label = (TextView)findViewById(R.id.label);
label.setText(getString(R.string.label_ringtone));
mRingtoneTitle = (TextView)ringtoneLayout.findViewById(R.id.data);
View sendToVoicemailLayout = findViewById(R.id.voicemail);
sendToVoicemailLayout.setOnClickListener(this);
label = (TextView)sendToVoicemailLayout.findViewById(R.id.label);
label.setText(getString(R.string.actionIncomingCall));
mSendToVoicemailCheckbox = (CheckBox)sendToVoicemailLayout.findViewById(R.id.checkbox);
}
@Override
protected void onResume() {
super.onResume();
if (!loadData()) {
finish();
}
updateView();
}
private void updateView() {
if (mCustomRingtone == null) {
mRingtoneTitle.setText(getString(R.string.default_ringtone));
} else {
Uri ringtoneUri = Uri.parse(mCustomRingtone);
Ringtone ringtone = RingtoneManager.getRingtone(this, ringtoneUri);
if (ringtone == null) {
Log.w(TAG, "ringtone's URI doesn't resolve to a Ringtone");
return;
}
mRingtoneTitle.setText(ringtone.getTitle(this));
}
mSendToVoicemailCheckbox.setChecked(mSendToVoicemail);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.ringtone: {
doPickRingtone();
break;
}
case R.id.voicemail: {
doToggleSendToVoicemail();
break;
}
}
}
private void doPickRingtone() {
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
// Allow user to pick 'Default'
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
// Show only ringtones
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
// Don't show 'Silent'
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
Uri ringtoneUri;
if (mCustomRingtone != null) {
ringtoneUri = Uri.parse(mCustomRingtone);
} else {
// Otherwise pick default ringtone Uri so that something is selected.
ringtoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
}
// Put checkmark next to the current ringtone for this contact
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtoneUri);
// Launch!
startActivityForResult(intent, RINGTONE_PICKED);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {
return;
}
switch (requestCode) {
case RINGTONE_PICKED: {
Uri pickedUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
handleRingtonePicked(pickedUri);
break;
}
}
}
private void handleRingtonePicked(Uri pickedUri) {
if (pickedUri == null || RingtoneManager.isDefault(pickedUri)) {
mCustomRingtone = null;
} else {
mCustomRingtone = pickedUri.toString();
}
saveData();
updateView();
}
private void doToggleSendToVoicemail() {
mSendToVoicemailCheckbox.toggle();
mSendToVoicemail = mSendToVoicemailCheckbox.isChecked();
saveData();
updateView();
}
private boolean loadData() {
Cursor c =
getContentResolver().query(mLookupUri, AGGREGATES_PROJECTION, null, null, null);
try {
if (!c.moveToFirst()) {
return false;
}
mCustomRingtone = c.getString(COL_CUSTOM_RINGTONE);
mSendToVoicemail = c.getInt(COL_SEND_TO_VOICEMAIL) != 0;
} finally {
c.close();
}
return true;
}
private void saveData() {
ContentValues values = new ContentValues(2);
values.put(Contacts.CUSTOM_RINGTONE, mCustomRingtone);
values.put(Contacts.SEND_TO_VOICEMAIL, mSendToVoicemail);
getContentResolver().update(mLookupUri, values, null, null);
}
@Override
public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData,
boolean globalSearch) {
if (globalSearch) {
super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
} else {
ContactsSearchManager.startSearch(this, initialQuery);
}
}
}