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