├── .gitignore ├── .idea ├── codeStyles │ └── Project.xml ├── gradle.xml ├── jarRepositories.xml ├── misc.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── rku │ │ └── tutorial07 │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── rku │ │ │ └── tutorial07 │ │ │ ├── DatabaseHelper.java │ │ │ ├── Login.java │ │ │ ├── RegistrationForm.java │ │ │ ├── Splash.java │ │ │ └── Welcome.java │ └── res │ │ ├── drawable-v24 │ │ ├── ic_launcher_foreground.xml │ │ ├── ic_logo.xml │ │ ├── ic_wave.xml │ │ ├── round_bg.xml │ │ ├── round_boder.xml │ │ └── text_bg.xml │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── layout │ │ ├── activity_login.xml │ │ ├── activity_registrationform.xml │ │ ├── activity_splash.xml │ │ └── activity_welcome.xml │ │ ├── menu │ │ └── cutsome_menu.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ └── values │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── rku │ └── tutorial07 │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 20 | 21 | 22 | 23 | 25 | 26 | 27 |
28 | 29 | 30 | 31 | xmlns:android 32 | 33 | ^$ 34 | 35 | 36 | 37 |
38 |
39 | 40 | 41 | 42 | xmlns:.* 43 | 44 | ^$ 45 | 46 | 47 | BY_NAME 48 | 49 |
50 |
51 | 52 | 53 | 54 | .*:id 55 | 56 | http://schemas.android.com/apk/res/android 57 | 58 | 59 | 60 |
61 |
62 | 63 | 64 | 65 | .*:name 66 | 67 | http://schemas.android.com/apk/res/android 68 | 69 | 70 | 71 |
72 |
73 | 74 | 75 | 76 | name 77 | 78 | ^$ 79 | 80 | 81 | 82 |
83 |
84 | 85 | 86 | 87 | style 88 | 89 | ^$ 90 | 91 | 92 | 93 |
94 |
95 | 96 | 97 | 98 | .* 99 | 100 | ^$ 101 | 102 | 103 | BY_NAME 104 | 105 |
106 |
107 | 108 | 109 | 110 | .* 111 | 112 | http://schemas.android.com/apk/res/android 113 | 114 | 115 | ANDROID_ATTRIBUTE_ORDER 116 | 117 |
118 |
119 | 120 | 121 | 122 | .* 123 | 124 | .* 125 | 126 | 127 | BY_NAME 128 | 129 |
130 |
131 |
132 |
133 |
134 |
-------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | 21 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tutorial07 2 | Login and Register Using Sqlit Database In-App Using Android Studio... 3 | 4 | 5 | **Begin with [Video-1](https://youtu.be/cp2rL3sAFmI), [Video-2](https://youtu.be/p8TaTgr4uKM)** 6 | 7 | First of all, go through with this video link and develop practice code for SQLite Database. 8 | 9 | **Tutorial Definition** 10 | 11 | As the user opens App, he should be asked for the login. If he is not registered yet, so provide a link for the registration screen. From the registration screen, he can create his user credential (first name, last name, email, gender-radio button, branch-spinner) and submit (Take reference of Tutorial-5). 12 | 13 | As the user registered, now he should be asked for the login with his credential which is stored in the database while registration and the welcome screen should display his username. **You need to add all the fields used in tutorial 05.** 14 | 15 | **Hint:** 16 | 17 | - Use SQLiteOpenHelper class for database operation. 18 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 30 5 | buildToolsVersion "30.0.1" 6 | 7 | defaultConfig { 8 | applicationId "com.rku.tutorial07" 9 | minSdkVersion 21 10 | targetSdkVersion 30 11 | versionCode 1 12 | versionName "1.0" 13 | 14 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 15 | } 16 | 17 | buildTypes { 18 | release { 19 | minifyEnabled false 20 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 21 | } 22 | } 23 | } 24 | 25 | dependencies { 26 | implementation fileTree(dir: "libs", include: ["*.jar"]) 27 | implementation 'androidx.appcompat:appcompat:1.2.0' 28 | implementation 'androidx.constraintlayout:constraintlayout:2.0.1' 29 | testImplementation 'junit:junit:4.12' 30 | androidTestImplementation 'androidx.test.ext:junit:1.1.2' 31 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' 32 | 33 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app/src/androidTest/java/com/rku/tutorial07/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.rku.tutorial07; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.test.platform.app.InstrumentationRegistry; 6 | import androidx.test.ext.junit.runners.AndroidJUnit4; 7 | 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | 11 | import static org.junit.Assert.*; 12 | 13 | /** 14 | * Instrumented test, which will execute on an Android device. 15 | * 16 | * @see Testing documentation 17 | */ 18 | @RunWith(AndroidJUnit4.class) 19 | public class ExampleInstrumentedTest { 20 | @Test 21 | public void useAppContext() { 22 | // Context of the app under test. 23 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 24 | assertEquals("com.rku.tutorial07", appContext.getPackageName()); 25 | } 26 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/rku/tutorial07/DatabaseHelper.java: -------------------------------------------------------------------------------- 1 | package com.rku.tutorial07; 2 | 3 | import android.content.ContentValues; 4 | import android.content.Context; 5 | import android.database.Cursor; 6 | import android.database.sqlite.SQLiteDatabase; 7 | import android.database.sqlite.SQLiteOpenHelper; 8 | import android.util.Log; 9 | 10 | import androidx.annotation.Nullable; 11 | 12 | public class DatabaseHelper extends SQLiteOpenHelper { 13 | 14 | public static final String DATABASE = "college"; 15 | public static final String TABLE = "student"; 16 | public static final String COL_1 = "ID"; 17 | public static final String COL_2 = "USERNAME"; 18 | public static final String COL_3 = "PASSWORD"; 19 | 20 | public DatabaseHelper(@Nullable Context context) { 21 | super(context, DATABASE, null, 1); 22 | SQLiteDatabase db = getWritableDatabase(); 23 | } 24 | 25 | @Override 26 | public void onCreate(SQLiteDatabase sqLiteDatabase) { 27 | String sql = "create table " + TABLE + " (ID INTEGER PRIMARY KEY AUTOINCREMENT,USERNAME TEXT,PASSWORD TEXT)"; 28 | Log.i("sql", sql); 29 | sqLiteDatabase.execSQL(sql); 30 | 31 | /* sqLiteDatabase.execSQL("create table " + TABLE +" (ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,SURNAME TEXT,MARKS INTEGER)");*/ 32 | 33 | } 34 | 35 | @Override 36 | public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 37 | sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE); 38 | onCreate(sqLiteDatabase); 39 | } 40 | 41 | public boolean insertData(String username, String password) { 42 | SQLiteDatabase db = getWritableDatabase(); 43 | ContentValues values = new ContentValues(); 44 | values.put(COL_2, username); 45 | values.put(COL_3, password); 46 | 47 | // insert into table_name (name,city,branch) values ('abc','rjt','ce') 48 | long result = db.insert(TABLE, null, values); 49 | return (result == -1) ? false : true; 50 | } 51 | 52 | public Cursor selectData() { 53 | SQLiteDatabase db = getWritableDatabase(); 54 | 55 | //Select * form Table 56 | Cursor cursor = db.query(TABLE, null, null, null, null, null, null); 57 | return cursor; 58 | } 59 | 60 | public boolean checkUser(String username, String password) { 61 | String[] columns = {COL_1}; 62 | SQLiteDatabase db = getReadableDatabase(); 63 | String selection = COL_2 + "=?" + " and " + COL_3 + "=?"; 64 | String[] selectionArgs = {username, password}; 65 | Cursor cursor = db.query(TABLE, columns, selection, selectionArgs, null, null, null); 66 | int count = cursor.getCount(); 67 | cursor.close(); 68 | db.close(); 69 | 70 | if (count > 0) 71 | return true; 72 | else 73 | return false; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /app/src/main/java/com/rku/tutorial07/Login.java: -------------------------------------------------------------------------------- 1 | package com.rku.tutorial07; 2 | 3 | import android.content.Intent; 4 | import android.content.SharedPreferences; 5 | import android.os.Bundle; 6 | import android.text.TextUtils; 7 | import android.util.Log; 8 | import android.util.Patterns; 9 | import android.view.View; 10 | import android.widget.Button; 11 | import android.widget.EditText; 12 | import android.widget.Toast; 13 | 14 | import androidx.appcompat.app.AppCompatActivity; 15 | 16 | public class Login extends AppCompatActivity { 17 | 18 | 19 | EditText edtUsername, edtPassword; 20 | Button btnLogin; 21 | DatabaseHelper databaseHelper; 22 | 23 | SharedPreferences preferences; 24 | SharedPreferences.Editor editor; 25 | 26 | @Override 27 | protected void onCreate(Bundle savedInstanceState) { 28 | super.onCreate(savedInstanceState); 29 | setContentView(R.layout.activity_login); 30 | this.setTitle("Login Form"); 31 | 32 | databaseHelper = new DatabaseHelper(this); 33 | 34 | edtUsername = findViewById(R.id.edtUsername); 35 | edtPassword = findViewById(R.id.edtPassword); 36 | btnLogin = findViewById(R.id.btnLogin); 37 | 38 | preferences = getSharedPreferences("college", MODE_PRIVATE); 39 | editor = preferences.edit(); 40 | 41 | String userPreference = preferences.getString("isLogin", ""); 42 | String namePreference = preferences.getString("username", ""); 43 | if (!userPreference.equals("")) { 44 | Intent intent = new Intent(Login.this, Welcome.class); 45 | intent.putExtra("username", namePreference); 46 | startActivity(intent); 47 | finish(); 48 | } 49 | 50 | String username = preferences.getString("username", ""); 51 | edtUsername.setText(username); 52 | final String password = preferences.getString("password", ""); 53 | edtPassword.setText(password); 54 | 55 | btnLogin.setOnClickListener(new View.OnClickListener() { 56 | @Override 57 | public void onClick(View v) { 58 | String ValUsername = edtUsername.getText().toString(); 59 | String ValPassword = edtPassword.getText().toString(); 60 | String ValLogin = btnLogin.getText().toString(); 61 | Log.i("Login Screen", "In Onclick"); 62 | 63 | /*------------------- Validation Start ---------------------*/ 64 | 65 | if (!Patterns.EMAIL_ADDRESS.matcher(ValUsername).matches()) { 66 | edtUsername.setError("Email address format is not valid"); 67 | return; 68 | } 69 | 70 | if (TextUtils.isEmpty(ValPassword)) { 71 | edtPassword.setError("Password is Required."); 72 | return; 73 | } 74 | 75 | if (ValPassword.length() < 6) { 76 | edtPassword.setError("Password Must be >= 6 Characters"); 77 | return; 78 | } 79 | 80 | /*------------------- Validation End ---------------------*/ 81 | 82 | Boolean res = databaseHelper.checkUser(ValUsername, ValPassword); 83 | 84 | if (res == true) { 85 | 86 | /* -----SHARE PREFERENCES----- */ 87 | 88 | editor.putString("username", ValUsername); 89 | editor.putString("password", ValPassword); 90 | editor.putString("isLogin", ValLogin); 91 | editor.commit(); 92 | 93 | /* -----END SHARE PREFERENCES----- */ 94 | 95 | Intent HomePage = new Intent(Login.this, Welcome.class); 96 | HomePage.putExtra("username", ValUsername); 97 | startActivity(HomePage); 98 | Toast.makeText(Login.this, "Login Successfully", Toast.LENGTH_SHORT).show(); 99 | } else { 100 | Toast.makeText(Login.this, "Username or Password is wrong.", Toast.LENGTH_SHORT).show(); 101 | } 102 | } 103 | }); 104 | } 105 | 106 | public void btnSignUp(View view) { 107 | Intent intent = new Intent(Login.this, RegistrationForm.class); 108 | startActivity(intent); 109 | finish(); 110 | } 111 | } -------------------------------------------------------------------------------- /app/src/main/java/com/rku/tutorial07/RegistrationForm.java: -------------------------------------------------------------------------------- 1 | package com.rku.tutorial07; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.text.TextUtils; 6 | import android.util.Patterns; 7 | import android.view.View; 8 | import android.widget.EditText; 9 | import android.widget.Toast; 10 | 11 | import androidx.appcompat.app.AppCompatActivity; 12 | 13 | public class RegistrationForm extends AppCompatActivity { 14 | EditText edtUsername, edtPassword; 15 | DatabaseHelper databaseHelper; 16 | 17 | @Override 18 | protected void onCreate(Bundle savedInstanceState) { 19 | super.onCreate(savedInstanceState); 20 | setContentView(R.layout.activity_registrationform); 21 | this.setTitle("Registration Form"); 22 | 23 | databaseHelper = new DatabaseHelper(this); 24 | 25 | edtUsername = findViewById(R.id.edtUsername); 26 | edtPassword = findViewById(R.id.edtPassword); 27 | 28 | } 29 | 30 | public void saveRecord(View view) { 31 | String ValUsername, ValPassword; 32 | 33 | ValUsername = edtUsername.getText().toString(); 34 | ValPassword = edtPassword.getText().toString(); 35 | 36 | /*------------------- Validation Start ---------------------*/ 37 | 38 | if (TextUtils.isEmpty(ValUsername)) { 39 | edtUsername.setError("Please Enter Email Address"); 40 | return; 41 | } 42 | 43 | if (!Patterns.EMAIL_ADDRESS.matcher(ValUsername).matches()) { 44 | Toast.makeText(RegistrationForm.this, "Email address format is not valid", Toast.LENGTH_SHORT).show(); 45 | return; 46 | } 47 | 48 | if (TextUtils.isEmpty(ValPassword)) { 49 | edtPassword.setError("Password is Required."); 50 | return; 51 | } 52 | 53 | if (ValPassword.length() < 6) { 54 | edtPassword.setError("Password Must be >= 6 Characters"); 55 | return; 56 | } 57 | 58 | /*------------------- Validation End ---------------------*/ 59 | 60 | if (databaseHelper.insertData(ValUsername, ValPassword)) { 61 | Toast.makeText(this, "User Created", Toast.LENGTH_SHORT).show(); 62 | edtUsername.setText(""); 63 | edtPassword.setText(""); 64 | } 65 | 66 | Intent intent = new Intent(RegistrationForm.this, Login.class); 67 | startActivity(intent); 68 | } 69 | 70 | public void btnLogin(View view) { 71 | Intent intent = new Intent(RegistrationForm.this, Login.class); 72 | startActivity(intent); 73 | } 74 | } -------------------------------------------------------------------------------- /app/src/main/java/com/rku/tutorial07/Splash.java: -------------------------------------------------------------------------------- 1 | package com.rku.tutorial07; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | 6 | import androidx.appcompat.app.AppCompatActivity; 7 | 8 | import java.util.Timer; 9 | import java.util.TimerTask; 10 | 11 | public class Splash extends AppCompatActivity { 12 | 13 | @Override 14 | protected void onCreate(Bundle savedInstanceState) { 15 | super.onCreate(savedInstanceState); 16 | setContentView(R.layout.activity_splash); 17 | 18 | /* Timer timer = new Timer(); 19 | TimerTask timerTask = new TimerTask() { 20 | @Override 21 | public void run() { 22 | Intent intent = new Intent(Splash.this,Login.class); 23 | startActivity(intent); 24 | finish(); 25 | } 26 | }; 27 | timer.schedule(timerTask,2000);*/ 28 | 29 | new Timer().schedule(new TimerTask() { 30 | @Override 31 | public void run() { 32 | Intent intent = new Intent(Splash.this, Login.class); 33 | startActivity(intent); 34 | finish(); 35 | } 36 | }, 2000); 37 | } 38 | } -------------------------------------------------------------------------------- /app/src/main/java/com/rku/tutorial07/Welcome.java: -------------------------------------------------------------------------------- 1 | package com.rku.tutorial07; 2 | 3 | import android.content.Intent; 4 | import android.content.SharedPreferences; 5 | import android.os.Bundle; 6 | import android.view.Menu; 7 | import android.view.MenuItem; 8 | import android.view.View; 9 | import android.widget.Switch; 10 | import android.widget.TextView; 11 | import android.widget.Toast; 12 | 13 | import androidx.annotation.NonNull; 14 | import androidx.appcompat.app.AppCompatActivity; 15 | 16 | public class Welcome extends AppCompatActivity { 17 | 18 | TextView txtWelcomeMessage; 19 | SharedPreferences preferences; 20 | SharedPreferences.Editor editor; 21 | 22 | 23 | @Override 24 | protected void onCreate(Bundle savedInstanceState) { 25 | super.onCreate(savedInstanceState); 26 | setContentView(R.layout.activity_welcome); 27 | 28 | txtWelcomeMessage = findViewById(R.id.txtWelcomeMessage); 29 | preferences = getSharedPreferences("college", MODE_PRIVATE); 30 | editor = preferences.edit(); 31 | 32 | Intent intent = getIntent(); 33 | String userdatavalue = intent.getStringExtra("username"); 34 | txtWelcomeMessage.setText("Welcome, " + userdatavalue); 35 | 36 | Toast.makeText(this, userdatavalue, Toast.LENGTH_SHORT).show(); 37 | } 38 | 39 | /* public void Logout(View view) { 40 | //editor.putString("username",""); 41 | editor.remove("username"); 42 | editor.commit(); 43 | Intent intent = new Intent(Welcome.this,Login.class); 44 | startActivity(intent); 45 | finish(); 46 | }*/ 47 | 48 | @Override 49 | public boolean onCreateOptionsMenu(Menu menu) { 50 | getMenuInflater().inflate(R.menu.cutsome_menu, menu); 51 | return super.onCreateOptionsMenu(menu); 52 | } 53 | 54 | @Override 55 | public boolean onOptionsItemSelected(@NonNull MenuItem item) { 56 | switch (item.getItemId()) { 57 | case R.id.mnuLogout: 58 | editor.remove("isLogin"); 59 | editor.commit(); 60 | Intent intent = new Intent(Welcome.this, Login.class); 61 | startActivity(intent); 62 | finish(); 63 | break; 64 | } 65 | return super.onOptionsItemSelected(item); 66 | } 67 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 15 | 18 | 21 | 22 | 23 | 24 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_logo.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_wave.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/round_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/round_boder.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/text_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 | 55 | 60 | 65 | 70 | 75 | 80 | 85 | 90 | 95 | 100 | 105 | 110 | 115 | 120 | 125 | 130 | 135 | 140 | 145 | 150 | 155 | 160 | 165 | 170 | 171 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_login.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | 23 | 24 | 29 | 30 | 35 | 36 | 45 | 46 | 53 | 54 | 63 | 64 | 73 | 74 | 75 | 76 | 82 | 83 | 92 | 93 | 103 | 104 | 105 | 114 | 115 |