1 /* 2 * Copyright (C) 2015 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.dialer.app.widget; 18 19 import android.content.Context; 20 import android.util.AttributeSet; 21 import android.view.LayoutInflater; 22 import android.view.View; 23 import android.widget.ImageView; 24 import android.widget.LinearLayout; 25 import android.widget.TextView; 26 import com.android.dialer.app.R; 27 28 public class EmptyContentView extends LinearLayout implements View.OnClickListener { 29 30 /** Listener to call when action button is clicked. */ 31 public interface OnEmptyViewActionButtonClickedListener { onEmptyViewActionButtonClicked()32 void onEmptyViewActionButtonClicked(); 33 } 34 35 public static final int NO_LABEL = 0; 36 public static final int NO_IMAGE = 0; 37 38 private ImageView mImageView; 39 private TextView mDescriptionView; 40 private TextView mActionView; 41 private OnEmptyViewActionButtonClickedListener mOnActionButtonClickedListener; 42 EmptyContentView(Context context)43 public EmptyContentView(Context context) { 44 this(context, null); 45 } 46 EmptyContentView(Context context, AttributeSet attrs)47 public EmptyContentView(Context context, AttributeSet attrs) { 48 this(context, attrs, 0); 49 } 50 EmptyContentView(Context context, AttributeSet attrs, int defStyleAttr)51 public EmptyContentView(Context context, AttributeSet attrs, int defStyleAttr) { 52 this(context, attrs, defStyleAttr, 0); 53 } 54 EmptyContentView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)55 public EmptyContentView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 56 super(context, attrs, defStyleAttr, defStyleRes); 57 inflateLayout(); 58 59 // Don't let touches fall through the empty view. 60 setClickable(true); 61 mImageView = (ImageView) findViewById(R.id.emptyListViewImage); 62 mDescriptionView = (TextView) findViewById(R.id.emptyListViewMessage); 63 mActionView = (TextView) findViewById(R.id.emptyListViewAction); 64 mActionView.setOnClickListener(this); 65 } 66 setDescription(int resourceId)67 public void setDescription(int resourceId) { 68 if (resourceId == NO_LABEL) { 69 mDescriptionView.setText(null); 70 mDescriptionView.setVisibility(View.GONE); 71 } else { 72 mDescriptionView.setText(resourceId); 73 mDescriptionView.setVisibility(View.VISIBLE); 74 } 75 } 76 setImage(int resourceId)77 public void setImage(int resourceId) { 78 if (resourceId == NO_LABEL) { 79 mImageView.setImageDrawable(null); 80 mImageView.setVisibility(View.GONE); 81 } else { 82 mImageView.setImageResource(resourceId); 83 mImageView.setVisibility(View.VISIBLE); 84 } 85 } 86 setActionLabel(int resourceId)87 public void setActionLabel(int resourceId) { 88 if (resourceId == NO_LABEL) { 89 mActionView.setText(null); 90 mActionView.setVisibility(View.GONE); 91 } else { 92 mActionView.setText(resourceId); 93 mActionView.setVisibility(View.VISIBLE); 94 } 95 } 96 isShowingContent()97 public boolean isShowingContent() { 98 return mImageView.getVisibility() == View.VISIBLE 99 || mDescriptionView.getVisibility() == View.VISIBLE 100 || mActionView.getVisibility() == View.VISIBLE; 101 } 102 setActionClickedListener(OnEmptyViewActionButtonClickedListener listener)103 public void setActionClickedListener(OnEmptyViewActionButtonClickedListener listener) { 104 mOnActionButtonClickedListener = listener; 105 } 106 107 @Override onClick(View v)108 public void onClick(View v) { 109 if (mOnActionButtonClickedListener != null) { 110 mOnActionButtonClickedListener.onEmptyViewActionButtonClicked(); 111 } 112 } 113 inflateLayout()114 protected void inflateLayout() { 115 setOrientation(LinearLayout.VERTICAL); 116 final LayoutInflater inflater = 117 (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 118 inflater.inflate(R.layout.empty_content_view, this); 119 } 120 121 } 122