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 21 import android.content.Context; 22 import android.util.AttributeSet; 23 import android.view.View; 24 import android.widget.LinearLayout; 25 import android.widget.TextView; 26 27 /** 28 * A View that is shown at the bottom of {@link MessageViewFragment} and contains buttons such 29 * as "(move to) newer". 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 */ 34 public class MessageCommandButtonView extends LinearLayout implements View.OnClickListener { 35 /** 36 * If false, we don't want to show anything, in which case all fields holding a view 37 * (e.g. {@link #mMoveToNewerButton}) are null. 38 */ 39 private boolean mShowPanel; 40 41 private View mMoveToNewerButton; 42 private View mMoveToOlderButton; 43 private TextView mMessagePosition; 44 45 private Callback mCallback = EmptyCallback.INSTANCE; 46 47 public interface Callback { 48 public void onMoveToNewer(); 49 public void onMoveToOlder(); 50 } 51 52 private static class EmptyCallback implements Callback { 53 public static final Callback INSTANCE = new EmptyCallback(); 54 @Override public void onMoveToNewer() {} 55 @Override public void onMoveToOlder() {} 56 } 57 58 public MessageCommandButtonView(Context context, AttributeSet attrs, int defStyle) { 59 super(context, attrs, defStyle); 60 } 61 62 public MessageCommandButtonView(Context context, AttributeSet attrs) { 63 super(context, attrs); 64 } 65 66 public MessageCommandButtonView(Context context) { 67 super(context); 68 } 69 70 @Override 71 protected void onFinishInflate() { 72 super.onFinishInflate(); 73 74 mMoveToNewerButton = findViewById(R.id.move_to_newer_button); 75 if (mMoveToNewerButton == null) { 76 mShowPanel = false; 77 return; 78 } 79 mShowPanel = true; 80 mMoveToOlderButton = findViewById(R.id.move_to_older_button); 81 mMessagePosition = (TextView) findViewById(R.id.message_position); 82 83 mMoveToNewerButton.setOnClickListener(this); 84 mMoveToOlderButton.setOnClickListener(this); 85 } 86 87 public void setCallback(Callback callback) { 88 mCallback = (callback == null) ? EmptyCallback.INSTANCE : callback; 89 } 90 91 public void enableNavigationButtons(boolean enableMoveToNewer, boolean enableMoveToOlder, 92 int currentPosition, int countMessages) { 93 if (!mShowPanel) { 94 return; 95 } 96 mMoveToNewerButton.setEnabled(enableMoveToNewer); 97 mMoveToOlderButton.setEnabled(enableMoveToOlder); 98 99 // Show "POSITION of TOTAL" 100 final String positionOfCount; 101 if (countMessages == 0) { 102 positionOfCount = ""; 103 } else { 104 positionOfCount = getContext().getResources().getString(R.string.position_of_count, 105 (currentPosition + 1), countMessages); 106 } 107 mMessagePosition.setText(positionOfCount); 108 } 109 110 @Override 111 public void onClick(View v) { 112 switch (v.getId()) { 113 case R.id.move_to_newer_button: 114 mCallback.onMoveToNewer(); 115 break; 116 case R.id.move_to_older_button: 117 mCallback.onMoveToOlder(); 118 break; 119 } 120 } 121 } 122