package tv.emby.embyatv.startup;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v17.leanback.widget.ArrayObjectAdapter;
import android.support.v17.leanback.widget.HeaderItem;
import android.support.v17.leanback.widget.ListRow;
import android.support.v17.leanback.widget.OnItemViewClickedListener;
import android.support.v17.leanback.widget.Presenter;
import android.support.v17.leanback.widget.Row;
import android.support.v17.leanback.widget.RowPresenter;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import mediabrowser.apiinteraction.EmptyResponse;
import mediabrowser.apiinteraction.android.GsonJsonSerializer;
import mediabrowser.model.apiclient.ServerInfo;
import tv.emby.embyatv.base.BaseActivity;
import tv.emby.embyatv.base.CustomMessage;
import tv.emby.embyatv.base.IKeyListener;
import tv.emby.embyatv.base.IMessageListener;
import tv.emby.embyatv.browsing.CustomBrowseFragment;
import tv.emby.embyatv.ui.GridButton;
import tv.emby.embyatv.itemhandling.ItemRowAdapter;
import tv.emby.embyatv.R;
import tv.emby.embyatv.browsing.StdBrowseFragment;
import tv.emby.embyatv.TvApp;
import tv.emby.embyatv.util.KeyProcessor;
import tv.emby.embyatv.util.Utils;
import tv.emby.embyatv.presentation.CardPresenter;
import tv.emby.embyatv.presentation.GridButtonPresenter;
/**
* Created by Eric on 12/4/2014.
*/
public class SelectServerFragment extends CustomBrowseFragment {
private static final int ENTER_MANUALLY = 0;
private static final int LOGIN_CONNECT = 1;
private static final int LOGOUT_CONNECT = 2;
private List<ServerInfo> mServers = new ArrayList<>();
@Override
public void onActivityCreated(Bundle savedInstanceState) {
GsonJsonSerializer serializer = TvApp.getApplication().getSerializer();
String[] passedItems = getActivity().getIntent().getStringArrayExtra("Servers");
if (passedItems != null) {
for (String json : passedItems) {
mServers.add((ServerInfo) serializer.DeserializeFromString(json, ServerInfo.class));
}
}
mActivity = (BaseActivity) getActivity();
super.onActivityCreated(savedInstanceState);
}
@Override
protected void addAdditionalRows(ArrayObjectAdapter rowAdapter) {
super.addAdditionalRows(rowAdapter);
HeaderItem serverHeader = new HeaderItem(rowAdapter.size(), mApplication.getString(R.string.lbl_select_server));
ItemRowAdapter serverAdapter = new ItemRowAdapter(mServers.toArray(new ServerInfo[mServers.size()]), new CardPresenter(), rowAdapter);
serverAdapter.Retrieve();
rowAdapter.add(new ListRow(serverHeader, serverAdapter));
HeaderItem gridHeader = new HeaderItem(rowAdapter.size(), mApplication.getString(R.string.lbl_other_options));
GridButtonPresenter mGridPresenter = new GridButtonPresenter();
ArrayObjectAdapter gridRowAdapter = new ArrayObjectAdapter(mGridPresenter);
gridRowAdapter.add(new GridButton(ENTER_MANUALLY, mApplication.getString(R.string.lbl_enter_manually), R.drawable.edit));
if (TvApp.getApplication().isConnectLogin()) {
gridRowAdapter.add(new GridButton(LOGOUT_CONNECT, mApplication.getString(R.string.lbl_logout_connect), R.drawable.unlink));
} else {
gridRowAdapter.add(new GridButton(LOGIN_CONNECT, mApplication.getString(R.string.lbl_login_with_connect), R.drawable.chain));
}
rowAdapter.add(new ListRow(gridHeader, gridRowAdapter));
}
@Override
protected void setupEventListeners() {
super.setupEventListeners();
mClickedListener.registerListener(new ItemViewClickedListener());
if (mActivity != null) {
mActivity.registerKeyListener(new IKeyListener() {
@Override
public boolean onKeyUp(int key, KeyEvent event) {
return KeyProcessor.HandleKey(key, mCurrentItem, mActivity);
}
});
mActivity.registerMessageListener(new IMessageListener() {
@Override
public void onMessageReceived(CustomMessage message) {
switch (message) {
case RemoveCurrentItem:
((ItemRowAdapter)mCurrentRow.getAdapter()).remove(mCurrentItem);
break;
}
}
});
}
}
private final class ItemViewClickedListener implements OnItemViewClickedListener {
@Override
public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item,
RowPresenter.ViewHolder rowViewHolder, Row row) {
if (item instanceof GridButton) {
switch (((GridButton) item).getId()) {
case ENTER_MANUALLY:
Utils.EnterManualServerAddress(getActivity());
break;
case LOGIN_CONNECT:
Intent intent = new Intent(getActivity(), ConnectActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
break;
case LOGOUT_CONNECT:
TvApp.getApplication().getConnectionManager().Logout(new EmptyResponse() {
@Override
public void onResponse() {
mApplication.setConnectLogin(false);
getActivity().finish();
}
});
break;
default:
Toast.makeText(getActivity(), item.toString(), Toast.LENGTH_SHORT)
.show();
break;
}
}
}
}
}