diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2b0effd..da422b4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -29,14 +29,7 @@ - - - - - - - - + @@ -44,6 +37,12 @@ + + + + + + diff --git a/app/src/main/java/sushi/hardcore/aira/CreateIdentityFragment.kt b/app/src/main/java/sushi/hardcore/aira/CreateIdentityFragment.kt index fba464f..aee951c 100644 --- a/app/src/main/java/sushi/hardcore/aira/CreateIdentityFragment.kt +++ b/app/src/main/java/sushi/hardcore/aira/CreateIdentityFragment.kt @@ -1,7 +1,7 @@ package sushi.hardcore.aira import android.content.Context -import android.content.Intent +import android.os.Binder import android.os.Bundle import androidx.fragment.app.Fragment import android.view.LayoutInflater @@ -16,8 +16,12 @@ class CreateIdentityFragment(private val activity: AppCompatActivity) : Fragment private external fun createNewIdentity(databaseFolder: String, name: String, password: ByteArray?): Boolean companion object { - fun newInstance(activity: AppCompatActivity): CreateIdentityFragment { - return CreateIdentityFragment(activity) + fun newInstance(activity: AppCompatActivity, binder: Binder): CreateIdentityFragment { + return CreateIdentityFragment(activity).apply { + arguments = Bundle().apply { + putBinder(LoginActivity.BINDER_ARG, binder) + } + } } } @@ -71,17 +75,17 @@ class CreateIdentityFragment(private val activity: AppCompatActivity) : Fragment } private fun createIdentity(identityName: String, password: ByteArray?) { - val databaseFolder = Constants.getDatabaseFolder(requireContext()) - if (createNewIdentity( - databaseFolder, - identityName, - password - )) { - val intent = Intent(activity, MainActivity::class.java) - intent.putExtra("identityName", identityName) - startActivity(intent) - activity.finish() - } else { + var success = false + arguments?.let { bundle -> + bundle.getBinder(LoginActivity.BINDER_ARG)?.let { binder -> + val databaseFolder = Constants.getDatabaseFolder(requireContext()) + if (createNewIdentity(databaseFolder, identityName, password)) { + (binder as LoginActivity.ActivityLauncher).launch(identityName) + success = true + } + } + } + if (!success) { Toast.makeText(activity, R.string.identity_create_failed, Toast.LENGTH_SHORT).show() } } diff --git a/app/src/main/java/sushi/hardcore/aira/LoginActivity.kt b/app/src/main/java/sushi/hardcore/aira/LoginActivity.kt index a9d0b7b..33b8809 100644 --- a/app/src/main/java/sushi/hardcore/aira/LoginActivity.kt +++ b/app/src/main/java/sushi/hardcore/aira/LoginActivity.kt @@ -1,6 +1,7 @@ package sushi.hardcore.aira import android.content.Intent +import android.os.Binder import android.os.Bundle import android.widget.Toast import androidx.appcompat.app.AppCompatActivity @@ -11,6 +12,8 @@ class LoginActivity : AppCompatActivity() { private external fun getIdentityName(databaseFolder: String): String? companion object { + const val NAME_ARG = "identityName" + const val BINDER_ARG = "binder" private external fun initLogging() init { System.loadLibrary("aira") @@ -18,6 +21,12 @@ class LoginActivity : AppCompatActivity() { } } + inner class ActivityLauncher: Binder() { + fun launch(identityName: String) { + startMainActivity(identityName) + } + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) @@ -31,8 +40,7 @@ class LoginActivity : AppCompatActivity() { val isProtected = AIRADatabase.isIdentityProtected(databaseFolder) val name = getIdentityName(databaseFolder) if (AIRAService.isServiceRunning) { - startActivity(Intent(this, MainActivity::class.java)) - finish() + startMainActivity(null) } else if (name != null && !isProtected) { if (AIRADatabase.loadIdentity(databaseFolder, null)) { AIRADatabase.clearCache() @@ -45,9 +53,9 @@ class LoginActivity : AppCompatActivity() { .add( R.id.fragment_container, if (name == null) { AIRADatabase.removeIdentityAvatar(databaseFolder) - CreateIdentityFragment.newInstance(this) + CreateIdentityFragment.newInstance(this, ActivityLauncher()) } else { - LoginFragment.newInstance(name) + LoginFragment.newInstance(name, ActivityLauncher()) } ) .commit() @@ -55,9 +63,11 @@ class LoginActivity : AppCompatActivity() { } private fun startMainActivity(identityName: String?) { - val intent = Intent(this, MainActivity::class.java) - intent.putExtra("identityName", identityName) - startActivity(intent) + val mainActivityIntent = Intent(this, MainActivity::class.java) + mainActivityIntent.action = intent.action + mainActivityIntent.putExtras(intent) + mainActivityIntent.putExtra(NAME_ARG, identityName) + startActivity(mainActivityIntent) finish() } } \ No newline at end of file diff --git a/app/src/main/java/sushi/hardcore/aira/LoginFragment.kt b/app/src/main/java/sushi/hardcore/aira/LoginFragment.kt index 46a4fa8..a9ad56b 100644 --- a/app/src/main/java/sushi/hardcore/aira/LoginFragment.kt +++ b/app/src/main/java/sushi/hardcore/aira/LoginFragment.kt @@ -1,6 +1,5 @@ package sushi.hardcore.aira -import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -11,10 +10,12 @@ import sushi.hardcore.aira.databinding.FragmentLoginBinding class LoginFragment : Fragment() { companion object { - private const val NAME_ARG = "identityName" - fun newInstance(name: String): LoginFragment { + fun newInstance(name: String, binder: LoginActivity.ActivityLauncher): LoginFragment { return LoginFragment().apply { - arguments = Bundle().apply { putString(NAME_ARG, name) } + arguments = Bundle().apply { + putBinder(LoginActivity.BINDER_ARG, binder) + putString(LoginActivity.NAME_ARG, name) + } } } } @@ -28,24 +29,23 @@ class LoginFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { arguments?.let { bundle -> - bundle.getString(NAME_ARG)?.let { name -> - val databaseFolder = Constants.getDatabaseFolder(requireContext()) - val avatar = AIRADatabase.getIdentityAvatar(databaseFolder) - if (avatar == null) { - binding.avatar.setTextAvatar(name) - } else { - binding.avatar.setImageAvatar(avatar) - } - binding.textIdentityName.text = name - binding.buttonLogin.setOnClickListener { - if (AIRADatabase.loadIdentity(databaseFolder, binding.editPassword.text.toString().toByteArray())) { - AIRADatabase.clearCache() - val intent = Intent(activity, MainActivity::class.java) - intent.putExtra("identityName", name) - startActivity(intent) - activity?.finish() + bundle.getString(LoginActivity.NAME_ARG)?.let { name -> + bundle.getBinder(LoginActivity.BINDER_ARG)?.let { binder -> + val databaseFolder = Constants.getDatabaseFolder(requireContext()) + val avatar = AIRADatabase.getIdentityAvatar(databaseFolder) + if (avatar == null) { + binding.avatar.setTextAvatar(name) } else { - Toast.makeText(activity, R.string.identity_load_failed, Toast.LENGTH_SHORT).show() + binding.avatar.setImageAvatar(avatar) + } + binding.textIdentityName.text = name + binding.buttonLogin.setOnClickListener { + if (AIRADatabase.loadIdentity(databaseFolder, binding.editPassword.text.toString().toByteArray())) { + AIRADatabase.clearCache() + (binder as LoginActivity.ActivityLauncher).launch(name) + } else { + Toast.makeText(activity, R.string.identity_load_failed, Toast.LENGTH_SHORT).show() + } } } } diff --git a/app/src/main/java/sushi/hardcore/aira/MainActivity.kt b/app/src/main/java/sushi/hardcore/aira/MainActivity.kt index 8384668..057ff15 100644 --- a/app/src/main/java/sushi/hardcore/aira/MainActivity.kt +++ b/app/src/main/java/sushi/hardcore/aira/MainActivity.kt @@ -94,7 +94,7 @@ class MainActivity : ServiceBoundActivity() { setContentView(binding.root) setSupportActionBar(binding.toolbar.toolbar) - val identityName = intent.getStringExtra("identityName") + val identityName = intent.getStringExtra(LoginActivity.NAME_ARG) identityName?.let { initToolbar(it) }