| /* |
| * Copyright (C) 2015 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.tv.ui.sidepanel; |
| |
| import android.text.TextUtils; |
| import android.view.View; |
| import android.widget.TextView; |
| import com.android.tv.R; |
| import com.android.tv.data.ChannelDataManager; |
| import com.android.tv.data.ChannelDataManager.ChannelListener; |
| import com.android.tv.data.OnCurrentProgramUpdatedListener; |
| import com.android.tv.data.Program; |
| import com.android.tv.data.ProgramDataManager; |
| import com.android.tv.data.api.Channel; |
| |
| public abstract class ChannelCheckItem extends CompoundButtonItem { |
| private final ChannelDataManager mChannelDataManager; |
| private final ProgramDataManager mProgramDataManager; |
| private Channel mChannel; |
| private TextView mProgramTitleView; |
| private TextView mChannelNumberView; |
| private final ChannelListener mChannelListener = |
| new ChannelListener() { |
| @Override |
| public void onChannelRemoved(Channel channel) {} |
| |
| @Override |
| public void onChannelUpdated(Channel channel) { |
| mChannel = channel; |
| } |
| }; |
| |
| private final OnCurrentProgramUpdatedListener mOnCurrentProgramUpdatedListener = |
| new OnCurrentProgramUpdatedListener() { |
| @Override |
| public void onCurrentProgramUpdated(long channelId, Program program) { |
| updateProgramTitle(program); |
| } |
| }; |
| |
| public ChannelCheckItem( |
| Channel channel, |
| ChannelDataManager channelDataManager, |
| ProgramDataManager programDataManager) { |
| super(channel.getDisplayName(), ""); |
| mChannel = channel; |
| mChannelDataManager = channelDataManager; |
| mProgramDataManager = programDataManager; |
| } |
| |
| protected Channel getChannel() { |
| return mChannel; |
| } |
| |
| @Override |
| protected int getResourceId() { |
| return R.layout.option_item_channel_check; |
| } |
| |
| @Override |
| protected int getCompoundButtonId() { |
| return R.id.check_box; |
| } |
| |
| @Override |
| protected int getTitleViewId() { |
| return R.id.channel_name; |
| } |
| |
| @Override |
| protected int getDescriptionViewId() { |
| return R.id.program_title; |
| } |
| |
| @Override |
| protected void onBind(View view) { |
| super.onBind(view); |
| mChannelNumberView = (TextView) view.findViewById(R.id.channel_number); |
| mProgramTitleView = (TextView) view.findViewById(R.id.program_title); |
| mChannelDataManager.addChannelListener(mChannel.getId(), mChannelListener); |
| mProgramDataManager.addOnCurrentProgramUpdatedListener( |
| mChannel.getId(), mOnCurrentProgramUpdatedListener); |
| } |
| |
| @Override |
| protected void onUpdate() { |
| super.onUpdate(); |
| mChannelNumberView.setText(getChannel().getDisplayNumber()); |
| updateProgramTitle(mProgramDataManager.getCurrentProgram(mChannel.getId())); |
| } |
| |
| @Override |
| protected void onUnbind() { |
| mChannelDataManager.removeChannelListener(mChannel.getId(), mChannelListener); |
| mProgramDataManager.removeOnCurrentProgramUpdatedListener( |
| mChannel.getId(), mOnCurrentProgramUpdatedListener); |
| mProgramTitleView = null; |
| mChannelNumberView = null; |
| super.onUnbind(); |
| } |
| |
| @Override |
| protected void onSelected() { |
| setChecked(!isChecked()); |
| } |
| |
| private void updateProgramTitle(Program program) { |
| String title = null; |
| if (program != null) { |
| title = program.getTitle(); |
| } |
| if (TextUtils.isEmpty(title)) { |
| title = mProgramTitleView.getContext().getString(R.string.no_program_information); |
| } |
| mProgramTitleView.setText(title); |
| } |
| } |