package com.androideasyapps.phoenix.shared;
import android.annotation.TargetApi;
import android.app.DialogFragment;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.androideasyapps.phoenix.dao.Server;
import butterknife.ButterKnife;
import rx.android.observables.AndroidObservable;
import rx.functions.Action0;
import rx.functions.Action1;
import com.androideasyapps.phoenix.services.sagetv.SageTVService;
import com.androideasyapps.phoenix.services.sagetv.model.Result;
import com.androideasyapps.phoenix.util.Util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class EditServerFragment extends DialogFragment {
private static final Logger log = LoggerFactory.getLogger(EditServerFragment.class);
public interface OnConfigured {
public void onConfigured(Server server);
}
Server server;
EditText displayName;
EditText host;
EditText port;
EditText username;
EditText password;
Button btnConnect;
private boolean connected;
public EditServerFragment() {
super();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
server=new Server();
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_edit_server, container, false);
displayName = ButterKnife.findById(v, R.id.displayName);
host = ButterKnife.findById(v, R.id.host);
port = ButterKnife.findById(v, R.id.port);
username = ButterKnife.findById(v, R.id.username);
password = ButterKnife.findById(v, R.id.password);
btnConnect = ButterKnife.findById(v, R.id.btnConnect);
btnConnect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
connect();
}
});
getDialog().setTitle("SageTV Server");
return v;
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
private void connect() {
connected=false;
server.setTitle(displayName.getText().toString());
server.setHost(host.getText().toString());
server.setPort(Util.parseInt(port.getText().toString()));
server.setUsername(username.getText().toString());
server.setPassword(password.getText().toString());
server.setServerId("default");
server.setIsDefault(true);
log.info("Connecting to Server: " + server.getHost());
SageTVService service = AppInstance.getInstance(this.getActivity()).getSageTVService(server);
btnConnect.animate().alpha(0).setDuration(500).start();
AndroidObservable.bindFragment(this, service.getDatabaseLastModified("TV")).subscribe(new Action1<Result<Number>>() {
@Override
public void call(Result<Number> numberResult) {
if (numberResult == null) {
onConnectFailed(new Throwable("connection failed"));
} else {
onConnectOK();
}
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
onConnectFailed(throwable);
}
}, new Action0() {
@Override
public void call() {
if (!connected) {
onConnectFailed(new Throwable("connection did not work"));
}
}
});
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void onConnectOK() {
log.info("Connect OK");
try {
AppInstance.getInstance(this.getActivity()).futureDAOManager.get().getServerDAO().save(server);
connected=true;
AppInstance.getInstance(this.getActivity()).setServer(server);
Toast.makeText(getActivity(), R.string.msg_connection_ok, Toast.LENGTH_LONG).show();
dismiss();
((OnConfigured)getActivity()).onConfigured(server);
} catch (Exception e) {
log.error("Save Server Failed", e);
}
}
private void onConnectFailed(Throwable t) {
btnConnect.setAlpha(1.0f);
log.error("We Did Not Connect", t);
Toast.makeText(getActivity(), R.string.msg_connection_failed, Toast.LENGTH_LONG).show();
}
}