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.widget; 18 19 import android.content.Context; 20 import android.support.annotation.StringRes; 21 import android.util.AttributeSet; 22 import android.view.LayoutInflater; 23 import android.view.View; 24 import android.widget.ImageView; 25 import android.widget.LinearLayout; 26 import android.widget.TextView; 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 43 private @StringRes int actionLabel; 44 EmptyContentView(Context context)45 public EmptyContentView(Context context) { 46 this(context, null); 47 } 48 EmptyContentView(Context context, AttributeSet attrs)49 public EmptyContentView(Context context, AttributeSet attrs) { 50 this(context, attrs, 0); 51 } 52 EmptyContentView(Context context, AttributeSet attrs, int defStyleAttr)53 public EmptyContentView(Context context, AttributeSet attrs, int defStyleAttr) { 54 this(context, attrs, defStyleAttr, 0); 55 } 56 EmptyContentView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)57 public EmptyContentView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 58 super(context, attrs, defStyleAttr, defStyleRes); 59 inflateLayout(); 60 61 // Don't let touches fall through the empty view. 62 setClickable(true); 63 mImageView = (ImageView) findViewById(R.id.empty_list_view_image); 64 mDescriptionView = (TextView) findViewById(R.id.empty_list_view_message); 65 mActionView = (TextView) findViewById(R.id.empty_list_view_action); 66 mActionView.setOnClickListener(this); 67 } 68 setDescription(int resourceId)69 public void setDescription(int resourceId) { 70 if (resourceId == NO_LABEL) { 71 mDescriptionView.setText(null); 72 mDescriptionView.setVisibility(View.GONE); 73 } else { 74 mDescriptionView.setText(resourceId); 75 mDescriptionView.setVisibility(View.VISIBLE); 76 } 77 } 78 setImage(int resourceId)79 public void setImage(int resourceId) { 80 if (resourceId == NO_LABEL) { 81 mImageView.setImageDrawable(null); 82 mImageView.setVisibility(View.GONE); 83 } else { 84 mImageView.setImageResource(resourceId); 85 mImageView.setVisibility(View.VISIBLE); 86 } 87 } 88 setActionLabel(@tringRes int resourceId)89 public void setActionLabel(@StringRes int resourceId) { 90 actionLabel = resourceId; 91 if (resourceId == NO_LABEL) { 92 mActionView.setText(null); 93 mActionView.setVisibility(View.GONE); 94 } else { 95 mActionView.setText(resourceId); 96 mActionView.setVisibility(View.VISIBLE); 97 } 98 } 99 getActionLabel()100 public @StringRes int getActionLabel() { 101 return actionLabel; 102 } 103 isShowingContent()104 public boolean isShowingContent() { 105 return mImageView.getVisibility() == View.VISIBLE 106 || mDescriptionView.getVisibility() == View.VISIBLE 107 || mActionView.getVisibility() == View.VISIBLE; 108 } 109 setActionClickedListener(OnEmptyViewActionButtonClickedListener listener)110 public void setActionClickedListener(OnEmptyViewActionButtonClickedListener listener) { 111 mOnActionButtonClickedListener = listener; 112 } 113 114 @Override onClick(View v)115 public void onClick(View v) { 116 if (mOnActionButtonClickedListener != null) { 117 mOnActionButtonClickedListener.onEmptyViewActionButtonClicked(); 118 } 119 } 120 inflateLayout()121 protected void inflateLayout() { 122 setOrientation(LinearLayout.VERTICAL); 123 final LayoutInflater inflater = 124 (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 125 inflater.inflate(R.layout.empty_content_view, this); 126 } 127 } 128