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.ViewGroup; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; import mediabrowser.apiinteraction.EmptyResponse; import mediabrowser.apiinteraction.Response; import mediabrowser.apiinteraction.android.GsonJsonSerializer; import mediabrowser.model.apiclient.ServerInfo; 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.presentation.CardPresenter; import tv.emby.embyatv.presentation.GridButtonPresenter; import tv.emby.embyatv.util.Utils; /** * Created by Eric on 12/4/2014. */ public class SelectUserFragment extends CustomBrowseFragment { private static final int GRID_ITEM_WIDTH = 200; private static final int GRID_ITEM_HEIGHT = 200; private static final int ENTER_MANUALLY = 0; private static final int LOGIN_CONNECT = 1; private static final int REPORT = 2; private static final int SWITCH_SERVER = 3; private ServerInfo mServer; @Override public void onActivityCreated(Bundle savedInstanceState) { GsonJsonSerializer serializer = TvApp.getApplication().getSerializer(); mServer = serializer.DeserializeFromString(getActivity().getIntent().getStringExtra("Server"), ServerInfo.class); super.onActivityCreated(savedInstanceState); } @Override protected void addAdditionalRows(ArrayObjectAdapter rowAdapter) { super.addAdditionalRows(rowAdapter); HeaderItem usersHeader = new HeaderItem(rowAdapter.size(), mApplication.getString(R.string.lbl_select_user)); ItemRowAdapter usersAdapter = new ItemRowAdapter(mServer, new CardPresenter(), rowAdapter); usersAdapter.Retrieve(); rowAdapter.add(new ListRow(usersHeader, usersAdapter)); 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)); gridRowAdapter.add(new GridButton(LOGIN_CONNECT, mApplication.getString(R.string.lbl_login_with_connect), R.drawable.chain)); gridRowAdapter.add(new GridButton(SWITCH_SERVER, mApplication.getString(R.string.lbl_switch_server), R.drawable.server)); gridRowAdapter.add(new GridButton(REPORT, mApplication.getString(R.string.lbl_send_logs), R.drawable.upload)); rowAdapter.add(new ListRow(gridHeader, gridRowAdapter)); } @Override protected void setupEventListeners() { super.setupEventListeners(); mClickedListener.registerListener(new ItemViewClickedListener()); } 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 SWITCH_SERVER: // Present server selection mApplication.getConnectionManager().GetAvailableServers(new Response<ArrayList<ServerInfo>>() { @Override public void onResponse(ArrayList<ServerInfo> serverResponse) { Intent serverIntent = new Intent(getActivity(), SelectServerActivity.class); GsonJsonSerializer serializer = TvApp.getApplication().getSerializer(); List<String> payload = new ArrayList<>(); for (ServerInfo server : serverResponse) { payload.add(serializer.SerializeToString(server)); } serverIntent.putExtra("Servers", payload.toArray(new String[payload.size()])); serverIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); getActivity().startActivity(serverIntent); } }); break; case ENTER_MANUALLY: // Manual login Utils.EnterManualUser(getActivity()); break; case LOGIN_CONNECT: //Logout since we've already connected to a server TvApp.getApplication().getApiClient().Logout(new EmptyResponse()); Intent intent = new Intent(getActivity(), ConnectActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(intent); break; case REPORT: Utils.reportError(getActivity(), "Send Log to Dev"); break; default: Toast.makeText(getActivity(), item.toString(), Toast.LENGTH_SHORT) .show(); break; } } } } private class GridItemPresenter extends Presenter { @Override public ViewHolder onCreateViewHolder(ViewGroup parent) { TextView view = new TextView(parent.getContext()); view.setLayoutParams(new ViewGroup.LayoutParams(GRID_ITEM_WIDTH, GRID_ITEM_HEIGHT)); view.setFocusable(true); view.setFocusableInTouchMode(true); view.setBackgroundColor(getResources().getColor(R.color.default_background)); view.setTextColor(Color.WHITE); view.setGravity(Gravity.CENTER); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder viewHolder, Object item) { ((TextView) viewHolder.view).setText(item.toString()); } @Override public void onUnbindViewHolder(ViewHolder viewHolder) { } } }