MessageCommandButtonView.java revision 0435a0775e3d6637304a5a4e93675e7462397eb1
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
17package com.android.email.activity;
18
19import com.android.email.R;
20
21import android.content.Context;
22import android.util.AttributeSet;
23import android.view.LayoutInflater;
24import android.view.View;
25import android.widget.LinearLayout;
26
27/**
28 * A View that is shown at the bottom of {@link MessageViewFragment} and contains buttons such
29 * as "Delete" "Mark unread".
30 *
31 * This class is meant to hide layout differences between portrait and landscape, if any.
32 * e.g. We might combine some of the buttons when we have small real estate.
33 */
34public class MessageCommandButtonView extends LinearLayout implements View.OnClickListener {
35    private View mMoveToNewerButton;
36    private View mMoveToOlderButton;
37    private View mForwardButton;
38    private View mReplyButton;
39    private View mReplyAllButton;
40    private View mDeleteButton;
41    private View mMarkUneadButton;
42    private View mMoveButton;
43
44    private Callback mCallback = EmptyCallback.INSTANCE;
45
46    public interface Callback {
47        public void onMoveToNewer();
48        public void onMoveToOlder();
49        public void onForward();
50        public void onReply();
51        public void onReplyAll();
52        public void onDelete();
53        public void onMarkUnread();
54        public void onMove();
55    }
56
57    private static class EmptyCallback implements Callback {
58        public static final Callback INSTANCE = new EmptyCallback();
59        @Override public void onDelete() {}
60        @Override public void onForward() {}
61        @Override public void onMarkUnread() {}
62        @Override public void onMove() {}
63        @Override public void onMoveToNewer() {}
64        @Override public void onMoveToOlder() {}
65        @Override public void onReply() {}
66        @Override public void onReplyAll() {}
67    }
68
69    public MessageCommandButtonView(Context context, AttributeSet attrs, int defStyle) {
70        super(context, attrs, defStyle);
71    }
72
73    public MessageCommandButtonView(Context context, AttributeSet attrs) {
74        super(context, attrs);
75    }
76
77    public MessageCommandButtonView(Context context) {
78        super(context);
79    }
80
81    @Override
82    protected void onFinishInflate() {
83        super.onFinishInflate();
84
85        mMoveToNewerButton = findViewById(R.id.move_to_newer_button);
86        mMoveToOlderButton = findViewById(R.id.move_to_older_button);
87        mForwardButton = findViewById(R.id.forward_button);
88        mReplyButton = findViewById(R.id.reply_button);
89        mReplyAllButton = findViewById(R.id.reply_all_button);
90        mDeleteButton = findViewById(R.id.delete_button);
91        mMarkUneadButton = findViewById(R.id.unread_button);
92        mMoveButton = findViewById(R.id.move_button);
93
94        mMoveToNewerButton.setOnClickListener(this);
95        mMoveToOlderButton.setOnClickListener(this);
96        mForwardButton.setOnClickListener(this);
97        mReplyButton.setOnClickListener(this);
98        mReplyAllButton.setOnClickListener(this);
99        mDeleteButton.setOnClickListener(this);
100        mMarkUneadButton.setOnClickListener(this);
101        mMoveButton.setOnClickListener(this);
102    }
103
104    public void setCallback(Callback callback) {
105        mCallback = (callback == null) ? EmptyCallback.INSTANCE : callback;
106    }
107
108    public void enableReplyForwardButtons(boolean enabled) {
109        mForwardButton.setEnabled(enabled);
110        mReplyButton.setEnabled(enabled);
111        mReplyAllButton.setEnabled(enabled);
112    }
113
114    public void enableNavigationButons(boolean enableMoveToNewer, boolean enableMoveToOlder) {
115        mMoveToNewerButton.setEnabled(enableMoveToNewer);
116        mMoveToOlderButton.setEnabled(enableMoveToOlder);
117    }
118
119    @Override
120    public void onClick(View v) {
121        switch (v.getId()) {
122            case R.id.move_to_newer_button:
123                mCallback.onMoveToNewer();
124                break;
125            case R.id.move_to_older_button:
126                mCallback.onMoveToOlder();
127                break;
128            case R.id.forward_button:
129                mCallback.onForward();
130                break;
131            case R.id.reply_button:
132                mCallback.onReply();
133                break;
134            case R.id.reply_all_button:
135                mCallback.onReplyAll();
136                break;
137            case R.id.delete_button:
138                mCallback.onDelete();
139                break;
140            case R.id.unread_button:
141                mCallback.onMarkUnread();
142                break;
143            case R.id.move_button:
144                mCallback.onMove();
145                break;
146        }
147    }
148}
149