Initial checkin of AOSP Messaging app.
b/23110861 Change-Id: I11db999bd10656801e618f78ab2b2ef74136fff1
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
/*
|
||||
* 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.ui;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.drawable.Drawable;
|
||||
|
||||
import com.android.messaging.Factory;
|
||||
import com.android.messaging.R;
|
||||
import com.android.messaging.util.ImageUtils;
|
||||
|
||||
/**
|
||||
* A singleton cache that holds tinted drawable resources for displaying messages, such as
|
||||
* message bubbles, audio attachments etc.
|
||||
*/
|
||||
public class ConversationDrawables {
|
||||
private static ConversationDrawables sInstance;
|
||||
|
||||
// Cache the color filtered bubble drawables so that we don't need to create a
|
||||
// new one for each ConversationMessageView.
|
||||
private Drawable mIncomingBubbleDrawable;
|
||||
private Drawable mOutgoingBubbleDrawable;
|
||||
private Drawable mIncomingErrorBubbleDrawable;
|
||||
private Drawable mIncomingBubbleNoArrowDrawable;
|
||||
private Drawable mOutgoingBubbleNoArrowDrawable;
|
||||
private Drawable mAudioPlayButtonDrawable;
|
||||
private Drawable mAudioPauseButtonDrawable;
|
||||
private Drawable mIncomingAudioProgressBackgroundDrawable;
|
||||
private Drawable mOutgoingAudioProgressBackgroundDrawable;
|
||||
private Drawable mAudioProgressForegroundDrawable;
|
||||
private Drawable mFastScrollThumbDrawable;
|
||||
private Drawable mFastScrollThumbPressedDrawable;
|
||||
private Drawable mFastScrollPreviewDrawableLeft;
|
||||
private Drawable mFastScrollPreviewDrawableRight;
|
||||
private final Context mContext;
|
||||
private int mOutgoingBubbleColor;
|
||||
private int mIncomingErrorBubbleColor;
|
||||
private int mIncomingAudioButtonColor;
|
||||
private int mSelectedBubbleColor;
|
||||
private int mThemeColor;
|
||||
|
||||
public static ConversationDrawables get() {
|
||||
if (sInstance == null) {
|
||||
sInstance = new ConversationDrawables(Factory.get().getApplicationContext());
|
||||
}
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
private ConversationDrawables(final Context context) {
|
||||
mContext = context;
|
||||
// Pre-create all the drawables.
|
||||
updateDrawables();
|
||||
}
|
||||
|
||||
public int getConversationThemeColor() {
|
||||
return mThemeColor;
|
||||
}
|
||||
|
||||
public void updateDrawables() {
|
||||
final Resources resources = mContext.getResources();
|
||||
|
||||
mIncomingBubbleDrawable = resources.getDrawable(R.drawable.msg_bubble_incoming);
|
||||
mIncomingBubbleNoArrowDrawable =
|
||||
resources.getDrawable(R.drawable.message_bubble_incoming_no_arrow);
|
||||
mIncomingErrorBubbleDrawable = resources.getDrawable(R.drawable.msg_bubble_error);
|
||||
mOutgoingBubbleDrawable = resources.getDrawable(R.drawable.msg_bubble_outgoing);
|
||||
mOutgoingBubbleNoArrowDrawable =
|
||||
resources.getDrawable(R.drawable.message_bubble_outgoing_no_arrow);
|
||||
mAudioPlayButtonDrawable = resources.getDrawable(R.drawable.ic_audio_play);
|
||||
mAudioPauseButtonDrawable = resources.getDrawable(R.drawable.ic_audio_pause);
|
||||
mIncomingAudioProgressBackgroundDrawable =
|
||||
resources.getDrawable(R.drawable.audio_progress_bar_background_incoming);
|
||||
mOutgoingAudioProgressBackgroundDrawable =
|
||||
resources.getDrawable(R.drawable.audio_progress_bar_background_outgoing);
|
||||
mAudioProgressForegroundDrawable =
|
||||
resources.getDrawable(R.drawable.audio_progress_bar_progress);
|
||||
mFastScrollThumbDrawable = resources.getDrawable(R.drawable.fastscroll_thumb);
|
||||
mFastScrollThumbPressedDrawable =
|
||||
resources.getDrawable(R.drawable.fastscroll_thumb_pressed);
|
||||
mFastScrollPreviewDrawableLeft =
|
||||
resources.getDrawable(R.drawable.fastscroll_preview_left);
|
||||
mFastScrollPreviewDrawableRight =
|
||||
resources.getDrawable(R.drawable.fastscroll_preview_right);
|
||||
mOutgoingBubbleColor = resources.getColor(R.color.message_bubble_color_outgoing);
|
||||
mIncomingErrorBubbleColor =
|
||||
resources.getColor(R.color.message_error_bubble_color_incoming);
|
||||
mIncomingAudioButtonColor =
|
||||
resources.getColor(R.color.message_audio_button_color_incoming);
|
||||
mSelectedBubbleColor = resources.getColor(R.color.message_bubble_color_selected);
|
||||
mThemeColor = resources.getColor(R.color.primary_color);
|
||||
}
|
||||
|
||||
public Drawable getBubbleDrawable(final boolean selected, final boolean incoming,
|
||||
final boolean needArrow, final boolean isError) {
|
||||
final Drawable protoDrawable;
|
||||
if (needArrow) {
|
||||
if (incoming) {
|
||||
protoDrawable = isError && !selected ?
|
||||
mIncomingErrorBubbleDrawable : mIncomingBubbleDrawable;
|
||||
} else {
|
||||
protoDrawable = mOutgoingBubbleDrawable;
|
||||
}
|
||||
} else if (incoming) {
|
||||
protoDrawable = mIncomingBubbleNoArrowDrawable;
|
||||
} else {
|
||||
protoDrawable = mOutgoingBubbleNoArrowDrawable;
|
||||
}
|
||||
|
||||
int color;
|
||||
if (selected) {
|
||||
color = mSelectedBubbleColor;
|
||||
} else if (incoming) {
|
||||
if (isError) {
|
||||
color = mIncomingErrorBubbleColor;
|
||||
} else {
|
||||
color = mThemeColor;
|
||||
}
|
||||
} else {
|
||||
color = mOutgoingBubbleColor;
|
||||
}
|
||||
|
||||
return ImageUtils.getTintedDrawable(mContext, protoDrawable, color);
|
||||
}
|
||||
|
||||
private int getAudioButtonColor(final boolean incoming) {
|
||||
return incoming ? mIncomingAudioButtonColor : mThemeColor;
|
||||
}
|
||||
|
||||
public Drawable getPlayButtonDrawable(final boolean incoming) {
|
||||
return ImageUtils.getTintedDrawable(
|
||||
mContext, mAudioPlayButtonDrawable, getAudioButtonColor(incoming));
|
||||
}
|
||||
|
||||
public Drawable getPauseButtonDrawable(final boolean incoming) {
|
||||
return ImageUtils.getTintedDrawable(
|
||||
mContext, mAudioPauseButtonDrawable, getAudioButtonColor(incoming));
|
||||
}
|
||||
|
||||
public Drawable getAudioProgressDrawable(final boolean incoming) {
|
||||
return ImageUtils.getTintedDrawable(
|
||||
mContext, mAudioProgressForegroundDrawable, getAudioButtonColor(incoming));
|
||||
}
|
||||
|
||||
public Drawable getAudioProgressBackgroundDrawable(final boolean incoming) {
|
||||
return incoming ? mIncomingAudioProgressBackgroundDrawable :
|
||||
mOutgoingAudioProgressBackgroundDrawable;
|
||||
}
|
||||
|
||||
public Drawable getFastScrollThumbDrawable(final boolean pressed) {
|
||||
if (pressed) {
|
||||
return ImageUtils.getTintedDrawable(mContext, mFastScrollThumbPressedDrawable,
|
||||
mThemeColor);
|
||||
} else {
|
||||
return mFastScrollThumbDrawable;
|
||||
}
|
||||
}
|
||||
|
||||
public Drawable getFastScrollPreviewDrawable(boolean positionRight) {
|
||||
Drawable protoDrawable = positionRight ? mFastScrollPreviewDrawableRight :
|
||||
mFastScrollPreviewDrawableLeft;
|
||||
return ImageUtils.getTintedDrawable(mContext, protoDrawable, mThemeColor);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user