blob: 2726839c2e58e0e0e71bb9f4aa2a475b97ae1c75 [file] [log] [blame]
/*
* 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);
}
}