• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.email.activity;
18 
19 import com.android.email.R;
20 import com.android.emailcommon.provider.Account;
21 import com.android.emailcommon.provider.Mailbox;
22 
23 import android.content.Context;
24 import android.content.res.Resources;
25 import android.graphics.drawable.Drawable;
26 import android.util.AttributeSet;
27 import android.widget.RelativeLayout;
28 import android.widget.TextView;
29 
30 public class MailboxListItem extends RelativeLayout {
31     // Colors used for drop targets
32     private static Integer sDropUnavailableFgColor;
33     private static Integer sDropAvailableBgColor;
34     private static Integer sTextPrimaryColor;
35     private static Integer sTextSecondaryColor;
36     private static Integer sDropTrashBgColor;
37 
38     /**
39      * Owner account ID for the mailbox, {@link Account#ACCOUNT_ID_COMBINED_VIEW} for a combined
40      * mailbox, or the ID for the current account, if it's an account row.
41      */
42     public long mAccountId;
43 
44     /**
45      * ID for the current mailbox, or {@link Mailbox#NO_MAILBOX} if it's an account row.
46      */
47     public long mMailboxId;
48     public Integer mMailboxType;
49     /** If {@code true} this item can be used as a drop target. Otherwise, drop is prohibited. */
50     public boolean mIsValidDropTarget;
51     /** If {@code true} this item can be navigated to. Otherwise, it can just be selected. */
52     public boolean mIsNavigable;
53     public MailboxFragmentAdapter mAdapter;
54 
55     private Drawable mBackground;
56     private TextView mLabelName;
57     private TextView mLabelCount;
58 
59     /**
60      * Drawable for an active item for D&D.  Note the drawable has state, so we can't share it
61      * between items.
62      * DO NOT use this directly; use {@link #getDropActiveBgDrawable()} instead, as it's lazily-
63      * initialized.
64      */
65     private Drawable mDropActiveBgDrawable;
66 
MailboxListItem(Context context)67     public MailboxListItem(Context context) {
68         super(context);
69     }
70 
MailboxListItem(Context context, AttributeSet attrs)71     public MailboxListItem(Context context, AttributeSet attrs) {
72         super(context, attrs);
73     }
74 
MailboxListItem(Context context, AttributeSet attrs, int defStyle)75     public MailboxListItem(Context context, AttributeSet attrs, int defStyle) {
76         super(context, attrs, defStyle);
77     }
78 
79     @Override
onFinishInflate()80     protected void onFinishInflate() {
81         super.onFinishInflate();
82         mBackground = getBackground();
83         if (sDropAvailableBgColor == null) {
84             Resources res = getResources();
85             sDropAvailableBgColor = res.getColor(R.color.mailbox_drop_available_bg_color);
86             sDropUnavailableFgColor = res.getColor(R.color.mailbox_drop_unavailable_fg_color);
87             sDropTrashBgColor = res.getColor(R.color.mailbox_drop_destructive_bg_color);
88             sTextPrimaryColor = res.getColor(R.color.text_primary_color);
89             sTextSecondaryColor = res.getColor(R.color.text_secondary_color);
90         }
91         mLabelName = (TextView)findViewById(R.id.mailbox_name);
92         mLabelCount = (TextView)findViewById(R.id.message_count);
93     }
94 
95     /**
96      * Whether or not this mailbox item is a drop target. Only valid mailboxes or those
97      * not forbidden by the system (see {@link Mailbox#INVALID_DROP_TARGETS}) will return
98      * {@code true}.
99      */
isDropTarget(long itemMailboxId)100     public boolean isDropTarget(long itemMailboxId) {
101         return mIsValidDropTarget && (itemMailboxId != mMailboxId);
102     }
103 
104     /**
105      * Returns whether or not this item can be navigated to.
106      */
isNavigable()107     public boolean isNavigable() {
108         return mIsNavigable;
109     }
110 
getDropActiveBgDrawable()111     private Drawable getDropActiveBgDrawable() {
112         if (mDropActiveBgDrawable == null) {
113             mDropActiveBgDrawable =
114                 getContext().getResources().getDrawable(R.drawable.list_activated_holo);
115         }
116         return mDropActiveBgDrawable;
117     }
118 
119     @Override
setBackgroundDrawable(Drawable d)120     public void setBackgroundDrawable(Drawable d) {
121         // Don't override with the same instance.
122         // If we don't do the check, something bad will happen to the fade-out animation for
123         // the selected to non-selected transition.  (Looks like if you re-set the same
124         // StateListDrawable instance, it'll get confused.)
125         if (d != getBackground()) {
126             super.setBackgroundDrawable(d);
127         }
128     }
129 
130     /**
131      * Set the "trash" drop target background.
132      */
setDropTrashBackground()133     public void setDropTrashBackground() {
134         setBackgroundColor(sDropTrashBgColor);
135     }
136 
137     /**
138      * Set the "active" drop target background.  (Used for the items that the user is hovering over)
139      */
setDropActiveBackground()140     public void setDropActiveBackground() {
141         setBackgroundDrawable(getDropActiveBgDrawable());
142     }
143 
setDropTargetBackground(boolean dragInProgress, long itemMailbox)144     public void setDropTargetBackground(boolean dragInProgress, long itemMailbox) {
145         int labelNameColor = sTextPrimaryColor;
146         int labelCountColor = sTextSecondaryColor;
147 
148         boolean isBackgroundSet = false;
149         if (dragInProgress) {
150             if (isDropTarget(itemMailbox)) {
151                 setBackgroundColor(sDropAvailableBgColor);
152                 isBackgroundSet = true;
153             } else {
154                 labelNameColor = sDropUnavailableFgColor;
155                 labelCountColor = sDropUnavailableFgColor;
156             }
157         }
158         if (!isBackgroundSet) {
159             // Drag not in progress, or it's not a drop target.
160             setBackgroundDrawable(mBackground);
161         }
162         mLabelName.setTextColor(labelNameColor);
163         mLabelCount.setTextColor(labelCountColor);
164     }
165 }
166