/*
* Copyright (c) 2015 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com>
* All Rights Reserved.
*/
package me.zhanghai.android.douya.broadcast.ui;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatDialog;
import android.support.v7.app.AppCompatDialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import butterknife.BindView;
import butterknife.ButterKnife;
import me.zhanghai.android.douya.R;
import me.zhanghai.android.douya.eventbus.BroadcastUpdatedEvent;
import me.zhanghai.android.douya.eventbus.EventBusUtils;
import me.zhanghai.android.douya.network.api.info.apiv2.Broadcast;
import me.zhanghai.android.douya.ui.TabFragmentPagerAdapter;
import me.zhanghai.android.douya.util.FragmentUtils;
public class BroadcastActivityDialogFragment extends AppCompatDialogFragment {
private static final String KEY_PREFIX = BroadcastActivityDialogFragment.class.getName() + '.';
private static final String EXTRA_BROADCAST = KEY_PREFIX + "broadcast";
@BindView(R.id.tab)
TabLayout mTabLayout;
@BindView(R.id.viewPager)
ViewPager mViewPager;
@BindView(android.R.id.button1)
Button mPositiveButton;
@BindView(android.R.id.button2)
Button mNegativeButton;
@BindView(android.R.id.button3)
Button mNeutralButton;
private TabFragmentPagerAdapter mTabAdapter;
private Broadcast mBroadcast;
/**
* @deprecated Use {@link #newInstance(Broadcast)} instead.
*/
public BroadcastActivityDialogFragment() {}
public static BroadcastActivityDialogFragment newInstance(Broadcast broadcast) {
//noinspection deprecation
BroadcastActivityDialogFragment fragment = new BroadcastActivityDialogFragment();
FragmentUtils.ensureArguments(fragment)
.putParcelable(EXTRA_BROADCAST, broadcast);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBroadcast = getArguments().getParcelable(EXTRA_BROADCAST);
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AppCompatDialog dialog = (AppCompatDialog) super.onCreateDialog(savedInstanceState);
// We are using a custom title, as in AlertDialog.
dialog.supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.broadcast_activity_dialog_fragment, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ButterKnife.bind(this, view);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mTabAdapter = new TabFragmentPagerAdapter(this);
mTabAdapter.addTab(new TabFragmentPagerAdapter.FragmentCreator() {
@Override
public Fragment createFragment() {
return BroadcastLikerListFragment.newInstance(mBroadcast);
}
}, null);
mTabAdapter.addTab(new TabFragmentPagerAdapter.FragmentCreator() {
@Override
public Fragment createFragment() {
return BroadcastRebroadcasterListFragment.newInstance(mBroadcast);
}
}, null);
updateTabTitle();
mViewPager.setOffscreenPageLimit(mTabAdapter.getCount() - 1);
mViewPager.setAdapter(mTabAdapter);
mTabLayout.setupWithViewPager(mViewPager);
mPositiveButton.setText(R.string.ok);
mPositiveButton.setVisibility(View.VISIBLE);
mPositiveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
}
});
mNegativeButton.setVisibility(View.GONE);
mNeutralButton.setVisibility(View.GONE);
}
@Override
public void onStart(){
super.onStart();
EventBusUtils.register(this);
}
@Override
public void onStop() {
super.onStop();
EventBusUtils.unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onBroadcastUpdated(BroadcastUpdatedEvent event) {
if (event.isFromMyself(this)) {
return;
}
if (event.broadcast.id == mBroadcast.id) {
mBroadcast = event.broadcast;
updateTabTitle();
}
}
private void updateTabTitle() {
mTabAdapter.setPageTitle(mTabLayout, 0, getTabTitle(mBroadcast.likeCount,
R.string.broadcast_likers_title_format, R.string.broadcast_likers_title_empty));
mTabAdapter.setPageTitle(mTabLayout, 1, getTabTitle(mBroadcast.rebroadcastCount,
R.string.broadcast_rebroadcasters_title_format,
R.string.broadcast_rebroadcasters_title_empty));
}
private CharSequence getTabTitle(int count, int formatResId, int emptyResId) {
return count > 0 ? getString(formatResId, count) : getString(emptyResId);
}
public static void show(Broadcast broadcast, Fragment fragment) {
BroadcastActivityDialogFragment.newInstance(broadcast)
.show(fragment.getChildFragmentManager(), null);
}
}