مرحله هشتم، جمعبندی ابزارهای ساختهشده در کلاس اکتیویتی لاگین
خوب حالا وقتشه که از این ابزارهایی که ساختیم، توی اکتیویتی لاگین استفاده کنیم:
public class LoginActivity extends ActivityEnhanced {
private Button btnActivate;
private Button btnHaveCode;
private Button btnBack;
private Button btnSend;
private EditText edtCode;
private EditText edtMobile;
private EditText edtName;
private SmsReceiver smsReceiver;
private TextView txtCode;
private TextView txtName;
private TextView txtMobile;
private TextView txtWaiting;
private ViewGroup lytActivate;
private ViewGroup lytSend;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
getControls();
smsReceiver = new SmsReceiver(new OnSmsReceivedListener() {
@Override
public void onSmsReceiver(String message, String phone, EditText editText) {
if (phone.equals("+98**************") || phone.equals("**************") {
editText.setText(message);
}
}
}, edtCode);
registerReceiver(smsReceiver, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));
lytActivate.setVisibility(View.GONE);
btnActivate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String mobile = edtMobile.getText().toString().replaceAll("[^0-9]", "");
mobile = mobile.substring(mobile.length() - 9);
new AsyncLogin()
.setPostExecute(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
LoginActivity.this.startActivity(intent);
LoginActivity.this.finish();
unregisterReceiver(smsReceiver);
}
})
.execute(mobile, edtCode.getText().toString());
}
});
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
lytActivate.setVisibility(View.GONE);
lytSend.setVisibility(View.VISIBLE);
}
});
btnHaveCode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (edtMobile.getText().toString().trim().isEmpty()) {
Toast.makeText(LoginActivity.this, "شماره موبایل اجباری است", Toast.LENGTH_SHORT).show();
} else {
lytActivate.setVisibility(View.VISIBLE);
lytSend.setVisibility(View.GONE);
}
}
});
btnSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name = edtName.getText().toString();
String mobile = edtMobile.getText().toString().replaceAll("[^0-9]", "");
mobile = mobile.substring(mobile.length() - 9);
if (name.length() > 0 && mobile.length() > 0) {
lytActivate.setVisibility(View.VISIBLE);
lytSend.setVisibility(View.GONE);
new AsyncRegister()
.setPostExecute(new Runnable() {
@Override
public void run() {
lytActivate.setVisibility(View.GONE);
lytSend.setVisibility(View.VISIBLE);
Toast.makeText(LoginActivity.this, "در زمان ثبت نام خطایی رخ داد. سعی مجدد", Toast.LENGTH_SHORT).show();
}
}).execute(name, mobile);
} else {
Toast.makeText(LoginActivity.this, "نام و تلفن را وارد کنید.", Toast.LENGTH_SHORT).show();
}
}
});
}
private void getControls() {
btnActivate = (Button) findViewById(R.id.btnActivate);
btnHaveCode = (Button) findViewById(R.id.btnHaveCode);
btnBack = (Button) findViewById(R.id.btnBack);
btnSend = (Button) findViewById(R.id.btnSend);
edtCode = (EditText) findViewById(R.id.edtCode);
edtMobile = (EditText) findViewById(R.id.edtMobile);
edtName = (EditText) findViewById(R.id.edtName);
lytActivate = (ViewGroup) findViewById(R.id.lytActivate);
lytSend = (ViewGroup) findViewById(R.id.lytSend);
txtCode = (TextView) findViewById(R.id.txtCode);
txtName = (TextView) findViewById(R.id.txtName);
txtMobile = (TextView) findViewById(R.id.txtMobile);
txtWaiting = (TextView) findViewById(R.id.txtWaiting);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (smsReceiver != null) {
try {
unregisterReceiver(smsReceiver);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
}
}
خوب توی این کلاس، ابتدا با فراخوانی متد getControls عناصر موجود توی لیاوت رو دریافت میکنیم. بعد یه شئ جدید از کلاس SmsReceiver که تو
مرحله هفتم ساختیم ایجاد میکنیم و بعنوان پارامترهاش، یک شئ جدید از رابط OnSmsReceivedListener که توی
مرحله دوم ساختیم و همچنین کادر متنی که کد دریافتی ازطریق پیامک باید اونجا وارد بشه رو میفرستیم.
توی رابط هم گفتیم که اگه شماره ارسالکننده با شماره سامانه پیامک ما برابر بود، توی کادر متن اون رو بنویسه.
توی خط بعدی این دریافتکننده رو برای فیلتر اینتنت android.provider.Telephony.SMS_RECEIVED ثبت میکنیم تا اگه پیامکی اومد، اجرا بشه.
بعد نمای فعالسازی (نیمه دوم لیاوتی که توی
مرحله سوم ساختیم) رو مخفی میکنیم تا فقط بخش مربوط به ورود نام و نام خانوادگی و شماره موبایل دیده بشه.
بعد میگیم اگه دکمه فعالسازی فشار داده شد، شماره موبایل رو بگیره و همراه با متن کد واردشده، برای کلاس AsyncLogin که توی
مرحله ششم ساختیم ارسال کنه و بعد از لاگین موفقیتآمیز هم به اکتیویتی Main منتقل بشه و شنونده پیامک رو هم غیرفعال کنه تا دیگه به پیامکهای دریافتی گوش نده. اگه به کد کلاس AsyncLogin دقت کنید، درصورتی که نتیجه result برابر با true باشه این کد رو اجرا میکنه.
دکمه Back خیلی ساده است و دوباره نمایش ورود نام و موبایل رو نشون میده و نیمه دوم صفحه رو مخفی میکنه.
دکمه HaveCode هم چک میکنه اگه کاربر موبایل رو خالی گذاشته باشه بهش میگه باید وارد کنی و اگه خالی نباشه، نیمه اول رو مخفی میکنه و نیمه ورود کد فعالسازی رو نشون میده.
دکمه Send هم اسم کاربر و شماره موبایل رو برای کلاس AsyncRegister میفرسته. البته کدی رو هم تعریف میکنه که درصورت لاگین موفقیتآمیز باید اجرا بشه که توی اون کد، نیمه دوم (ورود رمز دریافتی ازطریق پیامک) ظاهر میشه و نیمه اول صفحه رو پنهان میکنه. کدی هم که بعنوان postExecute معرفی میکنه برای وقتی هست که کد فعالسازی با موفقیت ارسال نشه (ثبتنام موفقیتآمیز نباشه). اگه به کلاس AsyncRegister دقت کنید که توی
مرحله پنجم نوشتیم، این کد درصورتی اجرا میشه که نتیجه result برابر با false باشه.