Home | History | Annotate | Download | only in widget
      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 {
     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 
     45   public EmptyContentView(Context context) {
     46     this(context, null);
     47   }
     48 
     49   public EmptyContentView(Context context, AttributeSet attrs) {
     50     this(context, attrs, 0);
     51   }
     52 
     53   public EmptyContentView(Context context, AttributeSet attrs, int defStyleAttr) {
     54     this(context, attrs, defStyleAttr, 0);
     55   }
     56 
     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 
     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 
     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 
     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 
    100   public @StringRes int getActionLabel() {
    101     return actionLabel;
    102   }
    103 
    104   public boolean isShowingContent() {
    105     return mImageView.getVisibility() == View.VISIBLE
    106         || mDescriptionView.getVisibility() == View.VISIBLE
    107         || mActionView.getVisibility() == View.VISIBLE;
    108   }
    109 
    110   public void setActionClickedListener(OnEmptyViewActionButtonClickedListener listener) {
    111     mOnActionButtonClickedListener = listener;
    112   }
    113 
    114   @Override
    115   public void onClick(View v) {
    116     if (mOnActionButtonClickedListener != null) {
    117       mOnActionButtonClickedListener.onEmptyViewActionButtonClicked();
    118     }
    119   }
    120 
    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