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)
}