package treehou.se.habit.ui.servers; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import butterknife.Unbinder; import io.realm.Realm; import treehou.se.habit.R; import treehou.se.habit.core.db.model.ServerDB; public class SetupServerFragment extends Fragment { private static final String ARG_SERVER = "ARG_SERVER"; public static final String ARG_BUTTON_TEXT_ID = "ARG_BUTTON_TEXT_ID"; private static final String EXTRA_SERVER_ID = "EXTRA_SERVER_ID"; @BindView(R.id.txt_server_name) EditText txtName; @BindView(R.id.txt_server_local) EditText txtLocalUrl; @BindView(R.id.txt_server_remote) EditText txtRemoteUrl; @BindView(R.id.txt_username) EditText txtUsername; @BindView(R.id.txt_password) EditText txtPassword; @BindView(R.id.btn_back) Button btnBack; private long serverId = -1; private int buttonTextId = R.string.back; private Unbinder unbinder; public static SetupServerFragment newInstance() { SetupServerFragment fragment = new SetupServerFragment(); Bundle args = new Bundle(); fragment.setArguments(args); return fragment; } public static SetupServerFragment newInstance(long serverId) { SetupServerFragment fragment = new SetupServerFragment(); Bundle args = new Bundle(); args.putLong(ARG_SERVER, serverId); fragment.setArguments(args); return fragment; } public SetupServerFragment() {} @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Bundle bundle = getArguments(); if(savedInstanceState != null && savedInstanceState.containsKey(EXTRA_SERVER_ID)){ serverId = savedInstanceState.getLong(EXTRA_SERVER_ID); }else if (bundle != null) { if (bundle.containsKey(ARG_SERVER)) serverId = bundle.getLong(ARG_SERVER); buttonTextId = bundle.getInt(ARG_BUTTON_TEXT_ID, R.string.back); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View rootView = inflater.inflate(R.layout.fragment_setup_server, container, false); unbinder = ButterKnife.bind(this, rootView); btnBack.setText(buttonTextId); return rootView; } @OnClick(R.id.btn_back) void onBack(){ getActivity().getSupportFragmentManager().popBackStack(); } @Override public void onResume() { super.onResume(); Realm realm = Realm.getDefaultInstance(); ServerDB server = realm.where(ServerDB.class).equalTo("id", serverId).findFirst(); if(server != null) { txtName.setText(server.getName()); txtLocalUrl.setText(server.getLocalUrl()); txtRemoteUrl.setText(server.getRemoteUrl()); txtUsername.setText(server.getUsername()); txtPassword.setText(server.getPassword()); } realm.close(); } private String toUrl(String text){ Uri uri = Uri.parse(text); return uri.toString(); } @Override public void onPause() { super.onPause(); Realm realm = Realm.getDefaultInstance(); realm.executeTransaction(realm1 -> { ServerDB server = new ServerDB(); if(serverId <= 0) { server.setId(ServerDB.getUniqueId()); serverId = server.getId(); } else { server.setId(serverId); } server.setName(txtName.getText().toString()); server.setLocalUrl(toUrl(txtLocalUrl.getText().toString())); server.setRemoteUrl(toUrl(txtRemoteUrl.getText().toString())); server.setUsername(txtUsername.getText().toString()); server.setPassword(txtPassword.getText().toString()); realm1.copyToRealmOrUpdate(server); }); realm.close(); } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } @Override public void onSaveInstanceState(Bundle outState) { outState.putLong(EXTRA_SERVER_ID, serverId); super.onSaveInstanceState(outState); } }