Home | History | Annotate | Download | only in ringtone
      1 /*
      2  * Copyright (C) 2016 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.deskclock.ringtone;
     18 
     19 import android.graphics.PorterDuff;
     20 import android.support.v4.content.ContextCompat;
     21 import android.view.ContextMenu;
     22 import android.view.LayoutInflater;
     23 import android.view.Menu;
     24 import android.view.View;
     25 import android.view.ViewGroup;
     26 import android.widget.ImageView;
     27 import android.widget.TextView;
     28 
     29 import com.android.deskclock.AnimatorUtils;
     30 import com.android.deskclock.ItemAdapter;
     31 import com.android.deskclock.R;
     32 import com.android.deskclock.ThemeUtils;
     33 import com.android.deskclock.Utils;
     34 
     35 import static android.view.View.GONE;
     36 import static android.view.View.OnClickListener;
     37 import static android.view.View.OnCreateContextMenuListener;
     38 import static android.view.View.VISIBLE;
     39 
     40 final class RingtoneViewHolder extends ItemAdapter.ItemViewHolder<RingtoneHolder>
     41         implements OnClickListener, OnCreateContextMenuListener {
     42 
     43     static final int VIEW_TYPE_SYSTEM_SOUND = R.layout.ringtone_item_sound;
     44     static final int VIEW_TYPE_CUSTOM_SOUND = -R.layout.ringtone_item_sound;
     45     static final int CLICK_NORMAL = 0;
     46     static final int CLICK_LONG_PRESS = -1;
     47     static final int CLICK_NO_PERMISSIONS = -2;
     48 
     49     private final View mSelectedView;
     50     private final TextView mNameView;
     51     private final ImageView mImageView;
     52 
     53     private RingtoneViewHolder(View itemView) {
     54         super(itemView);
     55         itemView.setOnClickListener(this);
     56 
     57         mSelectedView = itemView.findViewById(R.id.sound_image_selected);
     58         mNameView = (TextView) itemView.findViewById(R.id.ringtone_name);
     59         mImageView = (ImageView) itemView.findViewById(R.id.ringtone_image);
     60     }
     61 
     62     @Override
     63     protected void onBindItemView(RingtoneHolder itemHolder) {
     64         mNameView.setText(itemHolder.getName());
     65         final boolean opaque = itemHolder.isSelected() || !itemHolder.hasPermissions();
     66         mNameView.setAlpha(opaque ? 1f : .63f);
     67         mImageView.setAlpha(opaque ? 1f : .63f);
     68         mImageView.clearColorFilter();
     69 
     70         final int itemViewType = getItemViewType();
     71         if (itemViewType == VIEW_TYPE_CUSTOM_SOUND) {
     72             if (!itemHolder.hasPermissions()) {
     73                 mImageView.setImageResource(R.drawable.ic_ringtone_not_found);
     74                 final int colorAccent = ThemeUtils.resolveColor(itemView.getContext(),
     75                         R.attr.colorAccent);
     76                 mImageView.setColorFilter(colorAccent, PorterDuff.Mode.SRC_ATOP);
     77             } else {
     78                 mImageView.setImageResource(R.drawable.placeholder_album_artwork);
     79             }
     80         } else if (itemHolder.item == Utils.RINGTONE_SILENT) {
     81             mImageView.setImageResource(R.drawable.ic_ringtone_silent);
     82         } else if (itemHolder.isPlaying()) {
     83             mImageView.setImageResource(R.drawable.ic_ringtone_active);
     84         } else {
     85             mImageView.setImageResource(R.drawable.ic_ringtone);
     86         }
     87         AnimatorUtils.startDrawableAnimation(mImageView);
     88 
     89         mSelectedView.setVisibility(itemHolder.isSelected() ? VISIBLE : GONE);
     90 
     91         final int bgColorId = itemHolder.isSelected() ? R.color.white_08p : R.color.transparent;
     92         itemView.setBackgroundColor(ContextCompat.getColor(itemView.getContext(), bgColorId));
     93 
     94         if (itemViewType == VIEW_TYPE_CUSTOM_SOUND) {
     95             itemView.setOnCreateContextMenuListener(this);
     96         }
     97     }
     98 
     99     @Override
    100     public void onClick(View view) {
    101         if (getItemHolder().hasPermissions()) {
    102             notifyItemClicked(RingtoneViewHolder.CLICK_NORMAL);
    103         } else {
    104             notifyItemClicked(RingtoneViewHolder.CLICK_NO_PERMISSIONS);
    105         }
    106     }
    107 
    108     @Override
    109     public void onCreateContextMenu(ContextMenu contextMenu, View view,
    110             ContextMenu.ContextMenuInfo contextMenuInfo) {
    111         notifyItemClicked(RingtoneViewHolder.CLICK_LONG_PRESS);
    112         contextMenu.add(Menu.NONE, 0, Menu.NONE, R.string.remove_sound);
    113     }
    114 
    115     public static class Factory implements ItemAdapter.ItemViewHolder.Factory {
    116 
    117         private final LayoutInflater mInflater;
    118 
    119         Factory(LayoutInflater inflater) {
    120             mInflater = inflater;
    121         }
    122 
    123         @Override
    124         public ItemAdapter.ItemViewHolder<?> createViewHolder(ViewGroup parent, int viewType) {
    125             final View itemView = mInflater.inflate(R.layout.ringtone_item_sound, parent, false);
    126             return new RingtoneViewHolder(itemView);
    127         }
    128     }
    129 }
    130