121 lines
4 KiB
Kotlin
121 lines
4 KiB
Kotlin
package xyz.johnny.norntalk
|
|
|
|
import android.Manifest
|
|
import android.annotation.SuppressLint
|
|
import android.content.Intent
|
|
import android.content.pm.PackageManager
|
|
import android.os.AsyncTask
|
|
import android.os.Bundle
|
|
import android.support.v4.app.ActivityCompat
|
|
import android.support.v4.content.ContextCompat
|
|
import android.support.v7.app.AppCompatActivity
|
|
import com.google.zxing.BarcodeFormat
|
|
import xyz.johnny.norntalk.database.NornDatabase
|
|
import xyz.johnny.norntalk.messages.NornNotification
|
|
import xyz.johnny.norntalk.security.QRCode
|
|
import xyz.johnny.norntalk.security.Security
|
|
|
|
|
|
/**
|
|
* Le premier écran de l'application.
|
|
* On profite de cet écran pour charger certains éléments de l'application qui pourraient ralentir
|
|
* l'application si ils étaient instanciés plus tard.
|
|
*/
|
|
class SplashActivity : AppCompatActivity() {
|
|
|
|
private var _tasks: Array<AsyncTask<Void, Void, Unit>>? = null
|
|
/**
|
|
* Les tâches effectuées en arrière plan
|
|
*/
|
|
private val tasks get() = _tasks!!
|
|
|
|
/**
|
|
* L'ensemble des permissions demandées par l'application
|
|
*/
|
|
private val all_permissions = arrayOf(
|
|
Manifest.permission.RECEIVE_SMS,
|
|
Manifest.permission.SEND_SMS,
|
|
Manifest.permission.READ_SMS,
|
|
Manifest.permission.RECEIVE_MMS,
|
|
Manifest.permission.READ_CONTACTS,
|
|
Manifest.permission.VIBRATE,
|
|
Manifest.permission.READ_PHONE_STATE
|
|
)
|
|
|
|
/**
|
|
* Vérifie si une permission a été donnée par l'utilisateur.
|
|
*
|
|
* @param perm Permission
|
|
* @return Vrai si la permission a été donné, Faux sinon
|
|
*/
|
|
fun checkperm(perm: String) = ContextCompat.checkSelfPermission(this, perm) != PackageManager.PERMISSION_GRANTED
|
|
|
|
|
|
/**
|
|
* Méthode permettant d'effectuer des opérations en parallèle
|
|
*
|
|
* @param function Fonction contenant l'opération à effectuer en parallèle
|
|
* @return Tâche correspondant à l'opération
|
|
*/
|
|
@SuppressLint("StaticFieldLeak")
|
|
private fun load_helper(function: () -> Any?): AsyncTask<Void, Void, Unit> {
|
|
return object : AsyncTask<Void, Void, Unit>() {
|
|
override fun doInBackground(vararg params: Void?) {
|
|
function()
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Charger l'ensemble des singletons de Security
|
|
*
|
|
* @return Tâches correspondants aux opérations
|
|
*/
|
|
fun load(): Array<AsyncTask<Void, Void, Unit>> {
|
|
val tasks = arrayOf(
|
|
load_helper { Security.random },
|
|
load_helper { Security.curve },
|
|
load_helper { NornNotification.createChannel(this) },
|
|
load_helper { NornDatabase.getNornDatabase(this) },
|
|
load_helper { QRCode.getNumber(this, true) },
|
|
load_helper { Security.barcodeEncoder.encodeBitmap("a", BarcodeFormat.QR_CODE, 512, 512).recycle() }
|
|
)
|
|
|
|
tasks.forEach { it.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR) }
|
|
|
|
return tasks
|
|
}
|
|
|
|
@SuppressLint("StaticFieldLeak")
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
|
|
// lancer les tâches en arrière plan
|
|
this._tasks = this.load()
|
|
|
|
// trouver les permissions non acceptées par l'utilisateur
|
|
val permissions = all_permissions.filter { this.checkperm(it) }.toTypedArray()
|
|
|
|
if (permissions.isEmpty())
|
|
this.close()
|
|
else
|
|
// demander les permissions manquantes
|
|
ActivityCompat.requestPermissions(this, permissions, 0)
|
|
}
|
|
|
|
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
|
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
|
this.close()
|
|
}
|
|
|
|
/**
|
|
* Lancer l'activité principale après que toutes les tâches en arrière plan aient été effectuées
|
|
*/
|
|
fun close() {
|
|
val intent = Intent(this, MainActivity::class.java)
|
|
startActivity(intent)
|
|
finish()
|
|
}
|
|
|
|
}
|