/**
*
*/
package org.orange.familylink.fragment.dialog;
import org.orange.familylink.R;
import org.orange.familylink.data.Settings;
import org.orange.familylink.data.Settings.Role;
import org.orange.familylink.database.Contract;
import org.orange.familylink.database.Contract.Contacts;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
/**
* 初始化设置对话框。
* @author Team Orange
*/
public class InitialSetupDialogFragment extends DialogFragment {
private OnClickListener mListener;
private Animation mAnimationShake;
private EditText mEditTextContactName;
private EditText mEditTextContactAddress;
private Spinner mSpinnerRole;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAnimationShake = AnimationUtils.loadAnimation(getActivity(), R.anim.shake);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
setCancelable(false);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// inflate dialog view
final View dialogView = getActivity().getLayoutInflater()
.inflate(R.layout.dialog_fragment_initial_setup_dialog_view, null);
mEditTextContactName = (EditText) dialogView.findViewById(R.id.contact_name_input);
mEditTextContactAddress = (EditText) dialogView.findViewById(R.id.contact_address_input);
mSpinnerRole = (Spinner) dialogView.findViewById(R.id.role);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
getActivity(), R.array.pref_role_titles, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSpinnerRole.setAdapter(adapter);
mSpinnerRole.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
private final String[] mRoles = getResources().getStringArray(R.array.pref_role_titles);
private final TextView mContactNameLable = (TextView) dialogView.findViewById(R.id.contact_name_title);
private final TextView mContactAddressLable = (TextView) dialogView.findViewById(R.id.contact_address_title);
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String currentRole;
if(position == 1)
currentRole = mRoles[0];
else if(position == 0)
currentRole = mRoles[1];
else
throw new UnsupportedOperationException("Unsupported roles selected:"+position);
mContactNameLable.setText(getString(R.string.initial_setup_dialog_contact_name_label, currentRole));
mContactAddressLable.setText(getString(R.string.initial_setup_dialog_contact_phone_label, currentRole));
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
});
// 默认选择“受顾者”,照顾用户心理,避免用户自己选择“受顾者”
mSpinnerRole.setSelection(1);
builder.setView(dialogView)
.setTitle(R.string.initial_Setup)
.setPositiveButton(android.R.string.ok, null);
Dialog dialog = builder.create();
// 自动打开软键盘
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
return dialog;
}
@Override
public void onStart() {
super.onStart();
//super.onStart() is where dialog.show() is actually called on the underlying dialog,
//so we have to do it after this point
AlertDialog dialog = (AlertDialog) getDialog();
if(dialog != null) {
Button positiveButton = dialog.getButton(Dialog.BUTTON_POSITIVE);
positiveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean inputValid = true;
// 保存联系人信息
String name = mEditTextContactName.getText().toString();
String address = mEditTextContactAddress.getText().toString();
if(TextUtils.isEmpty(address)) {
mEditTextContactAddress.requestFocus();
mEditTextContactAddress.startAnimation(mAnimationShake);
inputValid = false;
}
if(TextUtils.isEmpty(name)) {
mEditTextContactName.requestFocus();
mEditTextContactName.startAnimation(mAnimationShake);
inputValid = false;
}
if(!inputValid)
return;
new ContactUpdater(getActivity().getContentResolver()).execute(name, address);
// 保存角色信息
int position = mSpinnerRole.getSelectedItemPosition();
Role role = null;
switch(position){
case 0:
role = Role.CARER;
break;
case 1:
role = Role.CAREE;
break;
default:
throw new IllegalStateException("illegal position :"+position);
}
Settings.setRole(getActivity(), role);
// 通知监视器
if(mListener != null)
mListener.onClickPositiveButton(InitialSetupDialogFragment.this);
dismiss();
}
});
}
}
/**
* 设置{@link OnClickListener}
* @param listener 新的{@link OnClickListener};可以设置为null,来取消之前的设置
*/
public void setOnClickListener(OnClickListener listener) {
mListener = listener;
}
/**
* 用来接收 用户点击对话框事件 的回调接口
* @author Team Orange
*/
public static interface OnClickListener {
/**
* 当用户点击确认时调用此方法
* @param dialog 发生确认点击事件的{@link DialogFragment}
*/
public void onClickPositiveButton(InitialSetupDialogFragment dialog);
}
private static class ContactUpdater extends AsyncTask<String, Void, Void> {
private final ContentResolver mContentResolver;
public ContactUpdater(ContentResolver contentResolver) {
mContentResolver = contentResolver;
}
@Override
protected Void doInBackground(String... params) {
String contactName = params[0];
String contactAddress = params[1];
mContentResolver.delete(Contract.Contacts.CONTACTS_URI, null, null);
ContentValues contact = new ContentValues(2);
contact.put(Contacts.COLUMN_NAME_NAME, contactName);
contact.put(Contacts.COLUMN_NAME_PHONE_NUMBER, contactAddress);
mContentResolver.insert(Contract.Contacts.CONTACTS_URI, contact);
return null;
}
}
}