add login dialog
* show dialog if no credentials are present
This commit is contained in:
		| @ -54,6 +54,8 @@ dependencies { | |||||||
|  |  | ||||||
|     implementation 'org.jsoup:jsoup:1.13.1' |     implementation 'org.jsoup:jsoup:1.13.1' | ||||||
|     implementation 'com.github.bumptech.glide:glide:4.11.0' |     implementation 'com.github.bumptech.glide:glide:4.11.0' | ||||||
|  |     implementation 'com.afollestad.material-dialogs:core:3.3.0' | ||||||
|  |     implementation 'com.afollestad.material-dialogs:bottomsheets:3.3.0' | ||||||
|  |  | ||||||
|     testImplementation 'junit:junit:4.12' |     testImplementation 'junit:junit:4.12' | ||||||
|     androidTestImplementation 'androidx.test.ext:junit:1.1.2' |     androidTestImplementation 'androidx.test.ext:junit:1.1.2' | ||||||
|  | |||||||
| @ -13,6 +13,7 @@ import org.mosad.teapod.parser.AoDParser | |||||||
| import org.mosad.teapod.preferences.EncryptedPreferences | import org.mosad.teapod.preferences.EncryptedPreferences | ||||||
| import org.mosad.teapod.ui.MediaFragment | import org.mosad.teapod.ui.MediaFragment | ||||||
| import org.mosad.teapod.ui.account.AccountFragment | import org.mosad.teapod.ui.account.AccountFragment | ||||||
|  | import org.mosad.teapod.ui.components.LoginDialog | ||||||
| import org.mosad.teapod.ui.home.HomeFragment | import org.mosad.teapod.ui.home.HomeFragment | ||||||
| import org.mosad.teapod.ui.library.LibraryFragment | import org.mosad.teapod.ui.library.LibraryFragment | ||||||
| import org.mosad.teapod.ui.search.SearchFragment | import org.mosad.teapod.ui.search.SearchFragment | ||||||
| @ -77,8 +78,12 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS | |||||||
|         if (EncryptedPreferences.password.isEmpty()) { |         if (EncryptedPreferences.password.isEmpty()) { | ||||||
|             Log.i(javaClass.name, "please login!") |             Log.i(javaClass.name, "please login!") | ||||||
|  |  | ||||||
|             // TODO show login dialog |             LoginDialog(this).positiveButton { | ||||||
|             //EncryptedPreferences.saveCredentials("", "", this) |                 EncryptedPreferences.saveCredentials(email, password, context) | ||||||
|  |             }.negativeButton { | ||||||
|  |                 Log.i(javaClass.name, "Login canceled, exiting.") | ||||||
|  |                 finish() | ||||||
|  |             }.show() | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -0,0 +1,95 @@ | |||||||
|  | /** | ||||||
|  |  * ProjectLaogai | ||||||
|  |  * | ||||||
|  |  * Copyright 2019-2020  <seil0@mosad.xyz> | ||||||
|  |  * | ||||||
|  |  * This program is free software; you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU General Public License as published by | ||||||
|  |  * the Free Software Foundation; either version 3 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program; if not, write to the Free Software | ||||||
|  |  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||||||
|  |  * MA 02110-1301, USA. | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | package org.mosad.teapod.ui.components | ||||||
|  |  | ||||||
|  | import android.content.Context | ||||||
|  | import android.widget.EditText | ||||||
|  | import com.afollestad.materialdialogs.MaterialDialog | ||||||
|  | import com.afollestad.materialdialogs.WhichButton | ||||||
|  | import com.afollestad.materialdialogs.actions.getActionButton | ||||||
|  | import com.afollestad.materialdialogs.bottomsheets.BottomSheet | ||||||
|  | import com.afollestad.materialdialogs.bottomsheets.setPeekHeight | ||||||
|  | import com.afollestad.materialdialogs.customview.customView | ||||||
|  | import com.afollestad.materialdialogs.customview.getCustomView | ||||||
|  | import org.mosad.teapod.R | ||||||
|  |  | ||||||
|  | class LoginDialog(val context: Context) { | ||||||
|  |  | ||||||
|  |     private val dialog = MaterialDialog(context, BottomSheet()) | ||||||
|  |  | ||||||
|  |     private val editTextLogin: EditText | ||||||
|  |     private val editTextPassword: EditText | ||||||
|  |  | ||||||
|  |     var email = "" | ||||||
|  |     var password = "" | ||||||
|  |  | ||||||
|  |     init { | ||||||
|  |         dialog.title(R.string.login) | ||||||
|  |             .message(R.string.login_desc) | ||||||
|  |             .customView(R.layout.dialog_login) | ||||||
|  |             .positiveButton(R.string.save) | ||||||
|  |             .negativeButton(R.string.cancel) | ||||||
|  |             .setPeekHeight(900) | ||||||
|  |  | ||||||
|  |         editTextLogin = dialog.getCustomView().findViewById(R.id.edit_text_login) | ||||||
|  |         editTextPassword = dialog.getCustomView().findViewById(R.id.edit_text_password) | ||||||
|  |  | ||||||
|  |         // fix not working accent color | ||||||
|  |         //dialog.getActionButton(WhichButton.POSITIVE).updateTextColor(Preferences.colorAccent) | ||||||
|  |         //dialog.getActionButton(WhichButton.NEGATIVE).updateTextColor(Preferences.colorAccent) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     fun positiveButton(func: LoginDialog.() -> Unit): LoginDialog = apply { | ||||||
|  |         dialog.positiveButton { | ||||||
|  |             email = editTextLogin.text.toString() | ||||||
|  |             password = editTextPassword.text.toString() | ||||||
|  |  | ||||||
|  |             func() | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     fun negativeButton(func: LoginDialog.() -> Unit): LoginDialog = apply { | ||||||
|  |         dialog.negativeButton { | ||||||
|  |             func() | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     fun show() { | ||||||
|  |         dialog.show() | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     fun show(func: LoginDialog.() -> Unit): LoginDialog = apply { | ||||||
|  |         func() | ||||||
|  |  | ||||||
|  |         editTextLogin.setText(email) | ||||||
|  |         editTextPassword.setText(password) | ||||||
|  |  | ||||||
|  |         show() | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Suppress("unused") | ||||||
|  |     fun dismiss() { | ||||||
|  |         dialog.dismiss() | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
							
								
								
									
										30
									
								
								app/src/main/res/layout/dialog_login.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								app/src/main/res/layout/dialog_login.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|  |     android:id="@+id/linLayout_login" | ||||||
|  |     android:layout_width="match_parent" | ||||||
|  |     android:layout_height="match_parent" | ||||||
|  |     android:orientation="vertical" | ||||||
|  |     android:paddingStart="24dp" | ||||||
|  |     android:paddingEnd="24dp"> | ||||||
|  |  | ||||||
|  |     <EditText | ||||||
|  |         android:id="@+id/edit_text_login" | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="wrap_content" | ||||||
|  |         android:layout_margin="7dp" | ||||||
|  |         android:ems="10" | ||||||
|  |         android:hint="@string/login" | ||||||
|  |         android:importantForAutofill="no" | ||||||
|  |         android:inputType="textEmailAddress" /> | ||||||
|  |  | ||||||
|  |     <EditText | ||||||
|  |         android:id="@+id/edit_text_password" | ||||||
|  |         android:layout_width="match_parent" | ||||||
|  |         android:layout_height="wrap_content" | ||||||
|  |         android:layout_margin="7dp" | ||||||
|  |         android:ems="10" | ||||||
|  |         android:hint="@string/password" | ||||||
|  |         android:importantForAutofill="no" | ||||||
|  |         android:inputType="textPassword" /> | ||||||
|  |  | ||||||
|  | </LinearLayout> | ||||||
| @ -5,6 +5,15 @@ | |||||||
|     <string name="title_search">Search</string> |     <string name="title_search">Search</string> | ||||||
|     <string name="title_account">Account</string> |     <string name="title_account">Account</string> | ||||||
|  |  | ||||||
|  |     <!-- dialogs --> | ||||||
|  |     <string name="save">save</string> | ||||||
|  |     <string name="cancel">@android:string/cancel</string> | ||||||
|  |  | ||||||
|  |     <!-- etc --> | ||||||
|  |     <string name="login">Login</string> | ||||||
|  |     <string name="login_desc">You need to login before you can use Teapod. Your Login-Data will be stored encrypted on your device.</string> | ||||||
|  |     <string name="password">Password</string> | ||||||
|  |  | ||||||
|     <!-- save keys --> |     <!-- save keys --> | ||||||
|     <string name="encrypted_preference_file_key" translatable="false">org.mosad.teapod.encrypted_preferences</string> |     <string name="encrypted_preference_file_key" translatable="false">org.mosad.teapod.encrypted_preferences</string> | ||||||
|     <string name="save_key_user_login" translatable="false">org.mosad.teapod.user_login</string> |     <string name="save_key_user_login" translatable="false">org.mosad.teapod.user_login</string> | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user