| /** |
| * Copyright (c) 2013, 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.browse; |
| |
| import android.content.Context; |
| import android.content.res.Resources; |
| import android.util.AttributeSet; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.widget.LinearLayout; |
| |
| import com.android.mail.R; |
| import com.android.mail.browse.ConversationViewAdapter.BorderItem; |
| import com.android.mail.utils.LogUtils; |
| |
| /** |
| * View displaying the border between messages. |
| * Contains two nine-patches and a {@link android.widget.Space}. |
| * The nine patches are the bottom of the preceding message |
| * and the top of the following message. |
| */ |
| public class BorderView extends LinearLayout { |
| |
| private static final String LOG_TAG = "BorderView"; |
| |
| private static int sMessageBorderSpaceHeight = -1; |
| private static int sMessageBorderHeightCollapsed = -1; |
| private static int sExpandedHeight = -1; |
| |
| private View mCardBottom; |
| private View mBorderSpace; |
| private View mCardTop; |
| |
| public BorderView(Context context) { |
| this(context, null); |
| } |
| |
| public BorderView(Context context, AttributeSet attrs) { |
| this(context, attrs, -1); |
| } |
| |
| public BorderView(Context context, AttributeSet attrs, int defStyle) { |
| super(context, attrs, defStyle); |
| |
| // In order to update the height appropriately based on |
| // whether the border is expanded or collapsed, |
| // we want to stash the height values for for the |
| // space in both its expanded and collapsed values. |
| // Additionally, we stash the total height of the view |
| // when both nine patches are visible. |
| if (sMessageBorderSpaceHeight == -1) { |
| final Resources res = context.getResources(); |
| sMessageBorderSpaceHeight = |
| res.getDimensionPixelSize(R.dimen.message_border_height); |
| sMessageBorderHeightCollapsed = res.getDimensionPixelSize( |
| R.dimen.message_border_height_collapsed); |
| } |
| } |
| |
| @Override |
| protected void onFinishInflate() { |
| super.onFinishInflate(); |
| |
| mCardBottom = findViewById(R.id.card_bottom); |
| mBorderSpace = findViewById(R.id.border_space); |
| mCardTop = findViewById(R.id.card_top); |
| } |
| |
| public void bind(BorderItem borderItem, boolean measureOnly) { |
| final boolean isExpanded = borderItem.isExpanded(); |
| if (sExpandedHeight == -1 && isExpanded && |
| !borderItem.isFirstBorder() && !borderItem.isLastBorder() && |
| borderItem.getHeight() > 0) { |
| sExpandedHeight = borderItem.getHeight(); |
| LogUtils.d(LOG_TAG, "Full Border Height: %s", sExpandedHeight); |
| } |
| |
| |
| |
| // Selectively show/hide the card nine-patches if the border is expanded or collapsed. |
| // Additionally this will occur if this is the first or last border. |
| mCardBottom.setVisibility(!isExpanded || borderItem.isFirstBorder() ? GONE : VISIBLE); |
| mCardTop.setVisibility(!isExpanded || borderItem.isLastBorder() ? GONE : VISIBLE); |
| |
| // Adjust space height based on expanded state. |
| final ViewGroup.LayoutParams params = mBorderSpace.getLayoutParams(); |
| params.height = isExpanded ? sMessageBorderSpaceHeight : sMessageBorderHeightCollapsed; |
| mBorderSpace.setLayoutParams(params); |
| } |
| |
| public void disableCardBottomBorder() { |
| mCardBottom.setVisibility(GONE); |
| } |
| |
| public void disableCardTopBorder() { |
| mCardTop.setVisibility(GONE); |
| } |
| |
| /** |
| * Returns the full expanded height value of the border view. |
| * This height should never change. |
| */ |
| public static int getExpandedHeight() { |
| if (sExpandedHeight == -1) { |
| LogUtils.wtf(LOG_TAG, "full height not initialized"); |
| } |
| |
| return sExpandedHeight; |
| } |
| |
| /** |
| * Returns the collapsed height value of the border view. |
| * This height should never change. |
| */ |
| public static int getCollapsedHeight() { |
| return sMessageBorderHeightCollapsed; |
| } |
| } |