🆕 Settings Menu

This commit is contained in:
Mylloon 2021-08-29 03:18:24 +02:00
parent 785d51d70c
commit 0d281fd0dd
6 changed files with 173 additions and 81 deletions

View file

@ -2,20 +2,26 @@ package com.mylloon.mobidl
import android.Manifest import android.Manifest
import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.content.pm.PackageManager import android.content.pm.PackageManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.text.Editable
import android.text.TextWatcher
import android.view.Menu
import android.view.MenuItem
import android.widget.Button import android.widget.Button
import android.widget.EditText import android.widget.EditText
import android.text.Editable
import android.text.TextWatcher
import android.view.MenuItem
import android.view.Menu
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import android.content.SharedPreferences import android.content.pm.PackageInfo
import android.net.Uri
import android.widget.TextView
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
@ -30,7 +36,7 @@ class MainActivity : AppCompatActivity() {
companion object { companion object {
private var instance: MainActivity? = null private var instance: MainActivity? = null
fun applicationContext() : Context { fun applicationContext(): Context {
return instance!!.applicationContext return instance!!.applicationContext
} }
} }
@ -44,44 +50,6 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
prefs = getSharedPreferences("com.mylloon.MobiDL", MODE_PRIVATE) prefs = getSharedPreferences("com.mylloon.MobiDL", MODE_PRIVATE)
fun loginPage() {
setContentView(R.layout.activity_login) // show login page
val userInput = findViewById<EditText>(R.id.usernameInput)
val passwordInput = findViewById<EditText>(R.id.passwordInput)
val buttonInput = findViewById<Button>(R.id.loginButton)
fun changeButtonStatus() { // function who enable/disable the login button
val text1: String = userInput.text.toString()
val text2: String = passwordInput.text.toString()
buttonInput.isEnabled = text1.isNotEmpty() && text2.isNotEmpty()
}
userInput.addTextChangedListener(object : TextWatcher { // looking user input changes
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun afterTextChanged(editable: Editable) {
changeButtonStatus()
}
})
passwordInput.addTextChangedListener(object :
TextWatcher { // looking password input changes
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun afterTextChanged(editable: Editable) {
changeButtonStatus()
}
})
buttonInput.setOnClickListener { // show main page when clicking the login button
val user = userInput.text.toString()
val password = passwordInput.text.toString()
Credentials().store(user, password)
mainPage()
}
}
if (Credentials().get(0) == null) { // test if credentials have already been registered if (Credentials().get(0) == null) { // test if credentials have already been registered
loginPage() // if no ask for loginPage() // if no ask for
} else { } else {
@ -89,21 +57,102 @@ class MainActivity : AppCompatActivity() {
} }
} }
private fun loginPage() {
setContentView(R.layout.activity_login) // show login page
val userInput = findViewById<EditText>(R.id.usernameInput)
val passwordInput = findViewById<EditText>(R.id.passwordInput)
val buttonInput = findViewById<Button>(R.id.loginButton)
fun changeButtonStatus() { // function who enable/disable the login button
val text1: String = userInput.text.toString()
val text2: String = passwordInput.text.toString()
buttonInput.isEnabled = text1.isNotEmpty() && text2.isNotEmpty()
}
userInput.addTextChangedListener(object : TextWatcher { // looking user input changes
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun afterTextChanged(editable: Editable) {
changeButtonStatus()
}
})
passwordInput.addTextChangedListener(object :
TextWatcher { // looking password input changes
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}
override fun afterTextChanged(editable: Editable) {
changeButtonStatus()
}
})
buttonInput.setOnClickListener { // show main page when clicking the login button
val user = userInput.text.toString()
val password = passwordInput.text.toString()
Credentials().store(user, password)
mainPage()
}
}
private fun mainPage() { private fun mainPage() {
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
toggleSettingsButtonVisibility() Handler(Looper.getMainLooper()).postDelayed({
toggleSettingsButtonVisibility()
}, 50)
// user = Credentials().get(0).toString() // user = Credentials().get(0).toString()
// password = Credentials().get(1).toString() // password = Credentials().get(1).toString()
// callScript(user, password) // call script // callScript(user, password) // call script
} }
@SuppressLint("SetTextI18n")
private fun settingsPage() {
setContentView(R.layout.activity_settings)
toggleSettingsButtonVisibility()
inSettings = true
val pInfo: PackageInfo =
applicationContext().packageManager.getPackageInfo(applicationContext().packageName, 0)
val stringVersion = findViewById<TextView>(R.id.version)
stringVersion.text = "v${pInfo.versionName}"
val credentialsButton = findViewById<Button>(R.id.changeCredentialsButton)
credentialsButton.setOnClickListener { // show main page when clicking the login button
Credentials().delete()
Toast.makeText(this@MainActivity, "Deleted credentials", Toast.LENGTH_LONG)
.show()
toggleSettingsButtonVisibility()
loginPage()
}
val sourceCodeButton = findViewById<Button>(R.id.sourcecodeButton)
sourceCodeButton.setOnClickListener {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(
"https://gitlab.com/Mylloon/mobilismScrap/-/tree/android"
)))
}
}
private fun callScript(user: String, password: String) {
if (ContextCompat.checkSelfPermission(this@MainActivity, Manifest.permission.INTERNET)
!= PackageManager.PERMISSION_GRANTED
) {
Toast.makeText(this@MainActivity, "No permission to use the internet", Toast.LENGTH_SHORT).show()
this.finishAffinity()
} else {
println("test du script")
Scraper(user, password, app = "Plex", debug = true).search()
}
}
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
if (prefs!!.getBoolean("firstrun", true)) { if (prefs!!.getBoolean("firstrun", true)) {
println("Generate RSA keys...") println("Generate RSA keys...")
Credentials().generateKey() Credentials().generateKey()
println("Done!") println("Done!")
prefs!!.edit().putBoolean("firstrun", false).apply() // first run done, now the next ones won't be "first". prefs!!.edit().putBoolean("firstrun", false)
.apply() // first run done, now the next ones won't be "first".
} }
} }
@ -116,9 +165,7 @@ class MainActivity : AppCompatActivity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean { // go to settings page when clicking on settings button override fun onOptionsItemSelected(item: MenuItem): Boolean { // go to settings page when clicking on settings button
when (item.itemId) { when (item.itemId) {
R.id.settingsButton -> { R.id.settingsButton -> {
setContentView(R.layout.activity_settings) settingsPage()
toggleSettingsButtonVisibility()
inSettings = true
} }
} }
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item)
@ -130,15 +177,4 @@ class MainActivity : AppCompatActivity() {
inSettings = false inSettings = false
} else super.onBackPressed() } else super.onBackPressed()
} }
private fun callScript(user: String, password: String) {
if(ContextCompat.checkSelfPermission(this@MainActivity, Manifest.permission.INTERNET)
!= PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this@MainActivity, "No permission to use internet", Toast.LENGTH_SHORT).show()
this.finishAffinity()
} else {
println("test du script")
Scraper(user, password, app = "Plex", debug = true).search()
}
}
} }

View file

@ -8,66 +8,67 @@
tools:context=".MainActivity"> tools:context=".MainActivity">
<TextView <TextView
android:id="@+id/textView2"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/exo_2_light" android:fontFamily="@font/exo_2_light"
android:text="@string/titleLogin" android:text="@string/titleLogin"
android:textAlignment="center" android:textAlignment="center"
android:textSize="34sp" android:textSize="34sp"
app:layout_constraintBottom_toTopOf="@+id/usernameInput" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0" app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.692" /> app:layout_constraintVertical_bias="0.111" />
<EditText <EditText
android:id="@+id/usernameInput" android:id="@+id/usernameInput"
android:layout_width="331dp" android:layout_width="331dp"
android:layout_height="48dp" android:layout_height="48dp"
android:layout_marginTop="60dp"
android:autofillHints="username" android:autofillHints="username"
android:ems="10" android:ems="10"
android:fontFamily="@font/exo_2_light" android:fontFamily="@font/exo_2_light"
android:hint="@string/userLogin" android:hint="@string/userLogin"
android:inputType="textPersonName" android:inputType="textPersonName"
app:layout_constraintBottom_toTopOf="@+id/passwordInput" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.504"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintVertical_bias="0.864" app:layout_constraintVertical_bias="0.0"
tools:ignore="TextContrastCheck" /> tools:ignore="TextContrastCheck" />
<EditText <EditText
android:id="@+id/passwordInput" android:id="@+id/passwordInput"
android:layout_width="331dp" android:layout_width="331dp"
android:layout_height="48dp" android:layout_height="48dp"
android:layout_marginTop="23dp"
android:autofillHints="password" android:autofillHints="password"
android:ems="10" android:ems="10"
android:fontFamily="@font/exo_2_light" android:fontFamily="@font/exo_2_light"
android:hint="@string/passwordLogin" android:hint="@string/passwordLogin"
android:inputType="textPassword" android:inputType="textPassword"
app:layout_constraintBottom_toTopOf="@+id/loginButton" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.504"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toBottomOf="@+id/usernameInput"
app:layout_constraintVertical_bias="0.88" app:layout_constraintVertical_bias="0.007"
tools:ignore="TextContrastCheck" /> tools:ignore="TextContrastCheck" />
<Button <Button
android:id="@+id/loginButton" android:id="@+id/loginButton"
android:layout_width="345dp" android:layout_width="345dp"
android:layout_height="102dp" android:layout_height="102dp"
android:layout_marginTop="65dp"
android:enabled="false" android:enabled="false"
android:fontFamily="@font/exo_2_medium" android:fontFamily="@font/exo_2_medium"
android:text="@string/buttonLogin" android:text="@string/buttonLogin"
android:textSize="34sp" android:textSize="34sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.505"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toBottomOf="@+id/passwordInput"
app:layout_constraintVertical_bias="0.54" /> app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -8,11 +8,53 @@
tools:context=".MainActivity"> tools:context=".MainActivity">
<TextView <TextView
android:layout_width="match_parent" android:id="@+id/textView"
android:layout_height="wrap_content" android:layout_width="232dp"
android:layout_marginTop="256dp" android:layout_height="47dp"
android:text="SETTINGS" android:fontFamily="@font/exo_2_medium"
android:text="@string/titleSettings"
android:textAlignment="center"
android:textSize="34sp" android:textSize="34sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
/> app:layout_constraintVertical_bias="0.131" />
<Button
android:id="@+id/changeCredentialsButton"
android:layout_width="198dp"
android:layout_height="85dp"
android:layout_marginTop="99dp"
android:text="@string/changeCredentials"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:layout_constraintVertical_bias="0.099" />
<Button
android:id="@+id/sourcecodeButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="43dp"
android:text="@string/sourceCode"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/changeCredentialsButton"
app:layout_constraintVertical_bias="0.0" />
<TextView
android:id="@+id/version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/sourcecodeButton"
app:layout_constraintVertical_bias="0.08" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -5,7 +5,7 @@
<item <item
android:id="@+id/settingsButton" android:id="@+id/settingsButton"
android:icon="@drawable/ic_settings" android:icon="@drawable/ic_settings"
android:title="Settings" android:title="@string/titleSettings"
android:visible="false" android:visible="false"
app:showAsAction="always" /> app:showAsAction="always" />
</menu> </menu>

View file

@ -4,4 +4,9 @@
<string name="userLogin" translatable="true">Identifiant</string> <string name="userLogin" translatable="true">Identifiant</string>
<string name="passwordLogin" translatable="true">Mot de passe</string> <string name="passwordLogin" translatable="true">Mot de passe</string>
<string name="buttonLogin" translatable="true">Connexion</string> <string name="buttonLogin" translatable="true">Connexion</string>
<string name="titleSettings" translatable="true">Paramètres</string>
<string name="changeCredentials">Change les identifiants</string>
<string name="sourceCode">Code source</string>
<string name="credits">Crédits</string>
</resources> </resources>

View file

@ -1,7 +1,15 @@
<resources> <resources>
<string name="app_name" translatable="false">MobiDL</string> <string name="app_name" translatable="false">MobiDL</string>
<!-- Login page -->
<string name="titleLogin">Login to your Mobilism account</string> <string name="titleLogin">Login to your Mobilism account</string>
<string name="userLogin">Username</string> <string name="userLogin">Username</string>
<string name="passwordLogin">Password</string> <string name="passwordLogin">Password</string>
<string name="buttonLogin">Login</string> <string name="buttonLogin">Login</string>
<!-- Settings page -->
<string name="titleSettings">Settings</string>
<string name="changeCredentials">Change credentials</string>
<string name="sourceCode">Source code</string>
<string name="credits">Credits</string>
</resources> </resources>