فایل : [دانلود فایل پروژه](http://bayanbox.ir/download/1739548845967674860/LoginPage.zip)
شرکت ```Quera``` به دنبال تولید اپلیکیشن موبایل اندروید برای سایت خود است، اولین قدم برای این منظور تولید صفحه ورود کاربران است. برای این منظور طراح گرافیکی این شرکت یک قالب اولیه برای این صفحه آماده کرده و بر روی ساختار ```XML``` پیاده سازی کرده است، وظیفه شما آن است که فرآیند ```submit``` را پیاده سازی نمایید. ابتدا باید کنترل صحت داده های ورودی بررسی شود. کنترل صحت داده ها به این صورت می باشد که:
+ هر کدام از ورودی ها باید مقدار داشته باشد در غیر این صورت پیام راهنمایی درون آن به ```Enter Email``` یا ```Enter Password``` با رنگ ```#FF0000``` تغیر می کند.
![نمونه خروجی](http://bayanbox.ir/view/2282226127807162684/Untitled.jpg)
+ مقدار وارد شده در ورودی ```Email``` باید آدرس یک ایمیل بر اساس استاندارد ```RFC 5322``` باشد.
+ مقدار وارد شده در ```Password``` باید حداقل ۸ کاراکتر باشد، این کارکاتر ها می توانند حروف کوچک و بزرگ، عدد و علائم ```@#$%&``` باشد که در هر پسورد حداقل یک حرف کوچک، یک حرف بزرگ، یک عدد و یکی از علائم مجاز باید حضور داشته باشد.
+ در صورت مغایرت مقدار وارد شده درون هر ورودی با شرایط فوق پیام خطای ```Password is not valid``` یا ```Email is not valid``` در بالای صفحه و در قسمت تعیین شده نمایش داده می شود. توجه کنید که در صورت اشتباه بودن هر دو ورودی هر دو پیام باید نمایش داده شوند و با کاراکتر ```\n``` از هم جدا شوند (ترتیب اهمیتی ندارد).
پس از بررسی صحت ورودی ها در صورت صحیح بودن آنها یک درخواست ```HTTP``` به یک سرور خارجی ارسال می شود. این درخواست از نوع ```POST``` می باشد که در بدنه آن یک ```JOSN``` شامل کلید های ```email``` و ```password``` به همراه مقادیر وارد شده می باشد. این درخواست به آدرس ```quera.ir/accounts/login``` ارسال می شود و پیام بازگردانی شده با فرمت ```HTTP``` درون ```ResultActivty``` نمایش داده می شود. برای ارسال این درخواست حتما از ```HttpURLConnection``` استفاده نمایید.
برای پاسخ به این سوال ابتدا فایل زیپ مربوط به این سوال را دانلود نمایید، داخل این فایل یک پروژه اندروید وجود دارد، پس از انجام تغییرات فوق پروژه اندروید را دوباره زیپ نموده و بر روی سایت بارگذاری نمایید. توجه نمایید که بجز فایل های مشخص شده به دیگر فایل های موجود در پروژه دست نزنید.**
ساختار فایل ناقص پروژه برای دانلود (فایلهایی که باید تغییر دهید با ----> نمایش داده شده اند):
```
<Your-zip-name>.zip
└───LoginPage
├───app
│ ├───libs
│ └───src
│ ├───androidTest
│ │ └───...
│ ├───main
│ │ │ AndroidManifest.xml
│ │ ├───java
│ │ │ └───ir
│ │ │ └───quera
│ │ │ └───loginpage
│ │ │ MainActivity.java <----
│ │ │ ResultActivity.java <----
│ │ │
│ │ └───res
│ │ ├───drawable
│ │ ├───layout
│ │ │ activity_main.xml <----
│ │ │ activity_result.xml <----
│ │ │
│ │ ├───mipmap-hdpi
│ │ ├───mipmap-mdpi
│ │ ├───mipmap-xhdpi
│ │ ├───mipmap-xxhdpi
│ │ ├───mipmap-xxxhdpi
│ │ └───values
│ │ colors.xml
│ │ strings.xml
│ │ styles.xml
│ │
│ └───test
│ └───...
└───gradle
└───...
```
+ تنها فایلهای موجود در آدرس زیر از پروژه شما استفاده خواهد شد بقیه فایلها از پروژه نمونه قرار داده شده خواهند بود. فایلهای اضافی شما قبل از داوری حذف میشود.
**app/src/main/***
ساختار درختی فایل ارسالی:
```
<Your-zip-name>.zip
├───main
│ ├───java
│ │ └───ir
│ │ └───quera
│ │ └───loginpage
│ │ MainActivity.java
│ │ ResultActivity.java
│ └───res
│ ├───drawable
│ ├───layout
│ │ activity_main.xml
│ │ activity_result.xml
│ ├───mipmap-hdpi
│ │ ...
│ ├───mipmap-mdpi
│ │ ...
│ ├───mipmap-xhdpi
│ │ ...
│ ├───mipmap-xxhdpi
│ │ ...
│ ├───mipmap-xxxhdpi
│ │ ...
│ └───values
│ colors.xml
│ strings.xml
│ styles.xml
│
└───test
└───...
```
+ توجه کنید که پروژه zip شده باید مستقیما در ریشه فایل zip قرار گیرد.