1c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang/* 2c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * Copyright (C) 2012 Google Inc. 3c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * Licensed to The Android Open Source Project. 4c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * 5c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * Licensed under the Apache License, Version 2.0 (the "License"); 6c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * you may not use this file except in compliance with the License. 7c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * You may obtain a copy of the License at 8c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * 9c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * http://www.apache.org/licenses/LICENSE-2.0 10c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * 11c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * Unless required by applicable law or agreed to in writing, software 12c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * distributed under the License is distributed on an "AS IS" BASIS, 13c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * See the License for the specific language governing permissions and 15c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * limitations under the License. 16c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang */ 17c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang 18c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huangpackage com.android.mail.browse; 19c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang 20c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huangimport android.content.Context; 21c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huangimport android.content.res.Resources; 22c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huangimport android.text.Layout; 23c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huangimport android.util.AttributeSet; 24c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huangimport android.widget.TextView; 25c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang 26c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huangimport com.android.mail.R; 27c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang 28c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang/** 29c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * A TextView that knows the widest that any of its containing 30c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * {@link FolderSpan}s can be. They cannot exceed the TextView line width, or 31c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang * else {@link Layout} will split up the spans in strange places. 32c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang */ 33c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huangpublic class FolderSpanTextView extends TextView implements FolderSpan.FolderSpanDimensions { 34c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang 35c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang private final int mFolderPadding; 36c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang private final int mFolderPaddingExtraWidth; 37c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang private final int mFolderPaddingBefore; 38b2c9f9f54cfe3b6d9014e48ffe2718381da8e41cAndrew Sapperstein private final int mFolderPaddingAbove; 39b2c9f9f54cfe3b6d9014e48ffe2718381da8e41cAndrew Sapperstein 40c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang private int mMaxSpanWidth; 41c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang 42c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang public FolderSpanTextView(Context context) { 43c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang this(context, null); 44c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang } 45c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang 46c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang public FolderSpanTextView(Context context, AttributeSet attrs) { 47c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang super(context, attrs); 48c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang 49c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang Resources r = getResources(); 50c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang mFolderPadding = r.getDimensionPixelOffset(R.dimen.conversation_folder_padding); 51c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang mFolderPaddingExtraWidth = r.getDimensionPixelOffset( 52c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang R.dimen.conversation_folder_padding_extra_width); 53c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang mFolderPaddingBefore = r.getDimensionPixelOffset( 54c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang R.dimen.conversation_folder_padding_before); 55b2c9f9f54cfe3b6d9014e48ffe2718381da8e41cAndrew Sapperstein mFolderPaddingAbove = r.getDimensionPixelOffset(R.dimen.conversation_folder_padding_above); 56c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang } 57c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang 58c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang @Override 59c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 60c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang mMaxSpanWidth = MeasureSpec.getSize(widthMeasureSpec) - getTotalPaddingLeft() 61c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang - getTotalPaddingRight(); 62c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang 63c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang super.onMeasure(widthMeasureSpec, heightMeasureSpec); 64c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang } 65c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang 66c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang @Override 67c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang public int getPadding() { 68c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang return mFolderPadding; 69c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang } 70c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang 71c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang @Override 72c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang public int getPaddingExtraWidth() { 73c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang return mFolderPaddingExtraWidth; 74c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang } 75c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang 76c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang @Override 77c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang public int getPaddingBefore() { 78c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang return mFolderPaddingBefore; 79c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang } 80c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang 81c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang @Override 82b2c9f9f54cfe3b6d9014e48ffe2718381da8e41cAndrew Sapperstein public int getPaddingAbove() { 83b2c9f9f54cfe3b6d9014e48ffe2718381da8e41cAndrew Sapperstein return mFolderPaddingAbove; 84b2c9f9f54cfe3b6d9014e48ffe2718381da8e41cAndrew Sapperstein } 85b2c9f9f54cfe3b6d9014e48ffe2718381da8e41cAndrew Sapperstein 86b2c9f9f54cfe3b6d9014e48ffe2718381da8e41cAndrew Sapperstein @Override 87c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang public int getMaxWidth() { 88c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang return mMaxSpanWidth; 89c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang } 90c03208720e5650f0acb748f82ed10ac770d6ceb4Andy Huang} 91