blob: ada8f9b1276aa5dfbd2ec790878bf2370f5585d4 [file] [log] [blame]
/*
* Copyright (C) 2014 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.interactions;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.provider.Telephony.Sms;
import android.text.BidiFormatter;
import android.text.Spannable;
import android.text.TextDirectionHeuristics;
import com.android.contacts.R;
import com.android.contacts.util.ContactDisplayUtils;
/**
* Represents an sms interaction, wrapping the columns in
* {@link android.provider.Telephony.Sms}.
*/
public class SmsInteraction implements ContactInteraction {
private static final String URI_TARGET_PREFIX = "smsto:";
private static final int SMS_ICON_RES = R.drawable.ic_message_24dp_mirrored;
private static BidiFormatter sBidiFormatter = BidiFormatter.getInstance();
private ContentValues mValues;
public SmsInteraction(ContentValues values) {
mValues = values;
}
@Override
public Intent getIntent() {
String address = getAddress();
return address == null ? null : new Intent(Intent.ACTION_VIEW).setData(
Uri.parse(URI_TARGET_PREFIX + address));
}
@Override
public long getInteractionDate() {
Long date = getDate();
return date == null ? -1 : date;
}
@Override
public String getViewHeader(Context context) {
String body = getBody();
if (getType() == Sms.MESSAGE_TYPE_SENT) {
body = context.getResources().getString(R.string.message_from_you_prefix, body);
}
return body;
}
@Override
public String getViewBody(Context context) {
return getAddress();
}
@Override
public String getViewFooter(Context context) {
Long date = getDate();
return date == null ? null : ContactInteractionUtil.formatDateStringFromTimestamp(
date, context);
}
@Override
public Drawable getIcon(Context context) {
return context.getResources().getDrawable(SMS_ICON_RES);
}
@Override
public Drawable getBodyIcon(Context context) {
return null;
}
@Override
public Drawable getFooterIcon(Context context) {
return null;
}
public String getAddress() {
final String address = mValues.getAsString(Sms.ADDRESS);
return address == null ? null :
sBidiFormatter.unicodeWrap(address, TextDirectionHeuristics.LTR);
}
public String getBody() {
return mValues.getAsString(Sms.BODY);
}
public Long getDate() {
return mValues.getAsLong(Sms.DATE);
}
public Long getDateSent() {
return mValues.getAsLong(Sms.DATE_SENT);
}
public Integer getErrorCode() {
return mValues.getAsInteger(Sms.ERROR_CODE);
}
public Boolean getLocked() {
return mValues.getAsBoolean(Sms.LOCKED);
}
public Integer getPerson() {
return mValues.getAsInteger(Sms.PERSON);
}
public Integer getProtocol() {
return mValues.getAsInteger(Sms.PROTOCOL);
}
public Boolean getRead() {
return mValues.getAsBoolean(Sms.READ);
}
public Boolean getReplyPathPresent() {
return mValues.getAsBoolean(Sms.REPLY_PATH_PRESENT);
}
public Boolean getSeen() {
return mValues.getAsBoolean(Sms.SEEN);
}
public String getServiceCenter() {
return mValues.getAsString(Sms.SERVICE_CENTER);
}
public Integer getStatus() {
return mValues.getAsInteger(Sms.STATUS);
}
public String getSubject() {
return mValues.getAsString(Sms.SUBJECT);
}
public Integer getThreadId() {
return mValues.getAsInteger(Sms.THREAD_ID);
}
public Integer getType() {
return mValues.getAsInteger(Sms.TYPE);
}
@Override
public Spannable getContentDescription(Context context) {
final String phoneNumber = getViewBody(context);
final String contentDescription = context.getResources().getString(
R.string.content_description_recent_sms,
getViewHeader(context), phoneNumber, getViewFooter(context));
return ContactDisplayUtils.getTelephoneTtsSpannable(contentDescription, phoneNumber);
}
@Override
public int getIconResourceId() {
return SMS_ICON_RES;
}
}