blob: 81da2d73ad0ad5cd0e4595e99dee84919f71bdf5 [file] [log] [blame]
/**
* Copyright (c) 2012, Google Inc.
*
* 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.mail.ui;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.RoundRectShape;
import android.graphics.drawable.shapes.Shape;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.mail.R;
import com.android.mail.providers.Folder;
import com.android.mail.utils.FolderUri;
import com.android.mail.utils.LogTag;
import com.android.mail.utils.LogUtils;
import com.android.mail.utils.Utils;
/**
* The view for each folder in the folder list.
*/
public class FolderItemView extends LinearLayout {
private final String LOG_TAG = LogTag.getLogTag();
private static float[] sUnseenCornerRadii;
private Folder mFolder;
private TextView mFolderTextView;
private TextView mUnreadCountTextView;
private TextView mUnseenCountTextView;
public FolderItemView(Context context) {
super(context);
loadResources(context);
}
public FolderItemView(Context context, AttributeSet attrs) {
super(context, attrs);
loadResources(context);
}
public FolderItemView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
loadResources(context);
}
private void loadResources(Context context) {
if (sUnseenCornerRadii == null) {
final float cornerRadius =
context.getResources().getDimension(R.dimen.folder_rounded_corner_radius);
sUnseenCornerRadii = new float[] {
cornerRadius, cornerRadius, // top left
cornerRadius, cornerRadius, // top right
cornerRadius, cornerRadius, // bottom right
cornerRadius, cornerRadius // bottom left
};
}
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mFolderTextView = (TextView)findViewById(R.id.name);
mUnreadCountTextView = (TextView)findViewById(R.id.unread);
mUnseenCountTextView = (TextView)findViewById(R.id.unseen);
}
/**
* Returns true if the two folders lead to identical {@link FolderItemView} objects.
* @param a
* @param b
* @return true if the two folders would still lead to the same {@link FolderItemView}.
*/
public static boolean areSameViews(final Folder a, final Folder b) {
if (a == null) {
return b == null;
}
if (b == null) {
// a is not null because it would have returned above.
return false;
}
return (a == b || (a.folderUri.equals(b.folderUri)
&& a.name.equals(b.name)
&& a.hasChildren == b.hasChildren
&& a.unseenCount == b.unseenCount
&& a.unreadCount == b.unreadCount));
}
public void bind(final Folder folder, final FolderUri parentUri) {
mFolder = folder;
mFolderTextView.setText(folder.name);
if (parentUri != null) {
final boolean isParent = folder.folderUri.equals(parentUri);
// If child folder, make spacer view visible, otherwise hide it away
findViewById(R.id.nested_folder_space).setVisibility(
isParent ? View.GONE : View.VISIBLE);
}
if (mFolder.isInbox() && mFolder.unseenCount > 0) {
mUnreadCountTextView.setVisibility(View.GONE);
setUnseenCount(mFolder.getBackgroundColor(Color.BLACK), mFolder.unseenCount);
} else {
mUnseenCountTextView.setVisibility(View.GONE);
setUnreadCount(Utils.getFolderUnreadDisplayCount(mFolder));
}
}
/**
* Sets the icon, if any.
*/
public void setIcon(final Folder folder) {
final ImageView folderIconView = (ImageView) findViewById(R.id.folder_icon);
Folder.setIcon(folder, folderIconView);
}
/**
* Sets the unread count, taking care to hide/show the textview if the count is zero/non-zero.
*/
private void setUnreadCount(int count) {
mUnreadCountTextView.setVisibility(count > 0 ? View.VISIBLE : View.GONE);
if (count > 0) {
mUnreadCountTextView.setText(Utils.getUnreadCountString(getContext(), count));
}
}
/**
* Sets the unseen count, taking care to hide/show the textview if the count is zero/non-zero.
*/
private void setUnseenCount(final int color, final int count) {
mUnseenCountTextView.setVisibility(count > 0 ? View.VISIBLE : View.GONE);
if (count > 0) {
final Shape shape = new RoundRectShape(sUnseenCornerRadii, null, null);
final ShapeDrawable drawable = new ShapeDrawable(shape);
drawable.getPaint().setColor(color);
mUnseenCountTextView.setBackgroundDrawable(drawable);
mUnseenCountTextView.setText(Utils.getUnseenCountString(getContext(), count));
}
}
/**
* Used if we detect a problem with the unread count and want to force an override.
* @param count
*/
public final void overrideUnreadCount(int count) {
LogUtils.e(LOG_TAG, "FLF->FolderItem.getFolderView: unread count mismatch found (%s vs %d)",
mUnreadCountTextView.getText(), count);
setUnreadCount(count);
}
}