• 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 sDropAvailableBgColor;
33     private static Integer sDropTrashBgColor;
34 
35     /**
36      * Owner account ID for the mailbox, {@link Account#ACCOUNT_ID_COMBINED_VIEW} for a combined
37      * mailbox, or the ID for the current account, if it's an account row.
38      */
39     public long mAccountId;
40 
41     /**
42      * ID for the current mailbox, or {@link Mailbox#NO_MAILBOX} if it's an account row.
43      */
44     public long mMailboxId;
45     public Integer mMailboxType;
46     /** If {@code true} this item can be used as a drop target. Otherwise, drop is prohibited. */
47     public boolean mIsValidDropTarget;
48     /** If {@code true} this item can be navigated to. Otherwise, it can just be selected. */
49     public boolean mIsNavigable;
50     public MailboxFragmentAdapter mAdapter;
51 
52     private Drawable mBackground;
53     private TextView mLabelName;
54     private TextView mLabelCount;
55 
56     /**
57      * Drawable for an active item for D&D.  Note the drawable has state, so we can't share it
58      * between items.
59      * DO NOT use this directly; use {@link #getDropActiveBgDrawable()} instead, as it's lazily-
60      * initialized.
61      */
62     private Drawable mDropActiveBgDrawable;
63 
MailboxListItem(Context context)64     public MailboxListItem(Context context) {
65         super(context);
66     }
67 
MailboxListItem(Context context, AttributeSet attrs)68     public MailboxListItem(Context context, AttributeSet attrs) {
69         super(context, attrs);
70     }
71 
MailboxListItem(Context context, AttributeSet attrs, int defStyle)72     public MailboxListItem(Context context, AttributeSet attrs, int defStyle) {
73         super(context, attrs, defStyle);
74     }
75 
76     @Override
onFinishInflate()77     protected void onFinishInflate() {
78         super.onFinishInflate();
79         mBackground = getBackground();
80         if (sDropAvailableBgColor == null) {
81             Resources res = getResources();
82             sDropAvailableBgColor = res.getColor(R.color.mailbox_drop_available_bg_color);
83             sDropTrashBgColor = res.getColor(R.color.mailbox_drop_destructive_bg_color);
84         }
85         mLabelName = (TextView)findViewById(R.id.mailbox_name);
86         mLabelCount = (TextView)findViewById(R.id.message_count);
87     }
88 
89     /**
90      * Whether or not this mailbox item is a drop target. Only valid mailboxes or those
91      * not forbidden by the system (see {@link Mailbox#INVALID_DROP_TARGETS}) will return
92      * {@code true}.
93      */
isDropTarget(long itemMailboxId)94     public boolean isDropTarget(long itemMailboxId) {
95         return mIsValidDropTarget && (itemMailboxId != mMailboxId);
96     }
97 
98     /**
99      * Returns whether or not this item can be navigated to.
100      */
isNavigable()101     public boolean isNavigable() {
102         return mIsNavigable;
103     }
104 
getDropActiveBgDrawable()105     private Drawable getDropActiveBgDrawable() {
106         if (mDropActiveBgDrawable == null) {
107             mDropActiveBgDrawable =
108                 getContext().getResources().getDrawable(R.drawable.list_activated_holo);
109         }
110         return mDropActiveBgDrawable;
111     }
112 
113     @Override
setBackgroundDrawable(Drawable d)114     public void setBackgroundDrawable(Drawable d) {
115         // Don't override with the same instance.
116         // If we don't do the check, something bad will happen to the fade-out animation for
117         // the selected to non-selected transition.  (Looks like if you re-set the same
118         // StateListDrawable instance, it'll get confused.)
119         if (d != getBackground()) {
120             super.setBackgroundDrawable(d);
121         }
122     }
123 
124     /**
125      * Set the "trash" drop target background.
126      */
setDropTrashBackground()127     public void setDropTrashBackground() {
128         setBackgroundColor(sDropTrashBgColor);
129     }
130 
131     /**
132      * Set the "active" drop target background.  (Used for the items that the user is hovering over)
133      */
setDropActiveBackground()134     public void setDropActiveBackground() {
135         setBackgroundDrawable(getDropActiveBgDrawable());
136     }
137 
setDropTargetBackground(boolean dragInProgress, long itemMailbox)138     public void setDropTargetBackground(boolean dragInProgress, long itemMailbox) {
139         boolean isBackgroundSet = false;
140         if (dragInProgress) {
141             if (isDropTarget(itemMailbox)) {
142                 setBackgroundColor(sDropAvailableBgColor);
143                 isBackgroundSet = true;
144             } else {
145                 mLabelName.setEnabled(false);
146                 mLabelCount.setEnabled(false);
147             }
148         } else {
149             mLabelName.setEnabled(true);
150             mLabelCount.setEnabled(true);
151         }
152         if (!isBackgroundSet) {
153             // Drag not in progress, or it's not a drop target.
154             setBackgroundDrawable(mBackground);
155         }
156     }
157 }
158