package eu.se_bastiaan.popcorntimeremote.fragments; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.ContentValues; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast; import com.mobsandgeeks.saripaar.Rule; import com.mobsandgeeks.saripaar.Validator; import com.mobsandgeeks.saripaar.annotation.IpAddress; import com.mobsandgeeks.saripaar.annotation.NumberRule; import com.mobsandgeeks.saripaar.annotation.Required; import butterknife.ButterKnife; import butterknife.Bind; import eu.se_bastiaan.popcorntimeremote.R; import eu.se_bastiaan.popcorntimeremote.activities.PairingScannerActivity; import eu.se_bastiaan.popcorntimeremote.database.InstanceEntry; import eu.se_bastiaan.popcorntimeremote.database.InstanceProvider; import eu.se_bastiaan.popcorntimeremote.models.ScanModel; public class InstanceEditorDialogFragment extends DialogFragment { private Boolean mIsNewInstance = false; private Validator mValidator; private String mId; @Bind(R.id.nameInput) @Required(order = 0) EditText nameInput; @Bind(R.id.ipInput) @Required(order = 1) EditText ipInput; @Bind(R.id.portInput) @Required(order = 3) @NumberRule(order = 4, type = NumberRule.NumberType.INTEGER) EditText portInput; @Bind(R.id.usernameInput) @Required(order = 5) EditText usernameInput; @Bind(R.id.passwordInput) @Required(order = 6) EditText passwordInput; @Bind(R.id.manualButton) Button manualButton; @Bind(R.id.scanButton) Button scanButton; @Bind(R.id.pairingLayout) LinearLayout pairingLayout; private final Validator.ValidationListener mValidationListener = new Validator.ValidationListener() { @Override public void onValidationSucceeded() { try { ContentValues values = new ContentValues(); values.put(InstanceEntry.COLUMN_NAME_NAME, nameInput.getText().toString()); values.put(InstanceEntry.COLUMN_NAME_IP, ipInput.getText().toString()); values.put(InstanceEntry.COLUMN_NAME_PORT, portInput.getText().toString()); values.put(InstanceEntry.COLUMN_NAME_USERNAME, usernameInput.getText().toString()); values.put(InstanceEntry.COLUMN_NAME_PASSWORD, passwordInput.getText().toString()); if (mIsNewInstance) { getActivity().getContentResolver().insert(InstanceProvider.INSTANCES_URI, values); } else { getActivity().getContentResolver().update(Uri.withAppendedPath(InstanceProvider.INSTANCES_URI, "/" + mId), values, null, null); } dismiss(); } catch (NullPointerException e) { e.printStackTrace(); } } @Override public void onValidationFailed(View failedView, Rule<?> failedRule) { String message = failedRule.getFailureMessage(); if (failedView instanceof EditText) { failedView.requestFocus(); ((EditText) failedView).setError(message); } else { Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show(); } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle args = getArguments(); if(args == null || !args.containsKey("_id")) { mIsNewInstance = true; } else { mId = args.getString("_id"); } mValidator = new Validator(this); mValidator.setValidationListener(mValidationListener); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { View view = getActivity().getLayoutInflater().inflate(R.layout.fragment_instanceeditor, null, false); ButterKnife.bind(this, view); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) .setView(view) .setPositiveButton(R.string.save, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } } ) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } } ); if(mIsNewInstance) { builder.setTitle(R.string.add_instance); } else { builder.setTitle(R.string.edit_instance); } final AlertDialog dialog = builder.create(); dialog.setOnShowListener(new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialogInterface) { dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mValidator.validateAsync(); } }); if(!mIsNewInstance) { Cursor cursor = getActivity().getContentResolver().query(Uri.withAppendedPath(InstanceProvider.INSTANCES_URI, "/" + mId), null, null, null, null); cursor.moveToFirst(); ipInput.setText(cursor.getString(1)); portInput.setText(cursor.getString(2)); nameInput.setText(cursor.getString(3)); usernameInput.setText(cursor.getString(4)); passwordInput.setText(cursor.getString(5)); cursor.close(); ipInput.setVisibility(View.VISIBLE); portInput.setVisibility(View.VISIBLE); usernameInput.setVisibility(View.VISIBLE); passwordInput.setVisibility(View.VISIBLE); pairingLayout.setVisibility(View.GONE); } } }); manualButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ipInput.setVisibility(View.VISIBLE); portInput.setVisibility(View.VISIBLE); usernameInput.setVisibility(View.VISIBLE); passwordInput.setVisibility(View.VISIBLE); pairingLayout.setVisibility(View.GONE); } }); PackageManager pm = getActivity().getPackageManager(); if(pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { scanButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getActivity(), PairingScannerActivity.class); startActivityForResult(intent, PairingScannerActivity.SCAN); } }); } else { scanButton.setEnabled(false); } return dialog; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == PairingScannerActivity.SCAN && resultCode == PairingScannerActivity.SUCCESS) { ScanModel model = data.getParcelableExtra("result"); ipInput.setText(model.ip); portInput.setText(model.port); usernameInput.setText(model.user); passwordInput.setText(model.user); manualButton.performClick(); } } }