Implement seed dialog redesign

This commit is contained in:
Niels Andriesse 2020-01-07 15:59:18 +11:00
parent 15b4c6aacc
commit 7f1359c6d3
10 changed files with 184 additions and 9 deletions

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/dialog_background" />
<corners android:radius="@dimen/dialog_corner_radius" />
<stroke android:width="@dimen/border_thickness" android:color="@color/dialog_border" />
</shape>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<inset
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/default_dialog_background"
android:insetRight="@dimen/medium_spacing"
android:insetLeft="@dimen/medium_spacing">
</inset>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/unimportant_dialog_button_background" />
<corners android:radius="@dimen/dialog_button_corner_radius" />
<stroke android:width="@dimen/border_thickness" android:color="@color/unimportant_dialog_button_background" />
</shape>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/unimportant_dialog_button_background" />
<corners android:radius="@dimen/dialog_button_corner_radius" />
<stroke android:width="@dimen/border_thickness" android:color="@color/unimportant_dialog_button_background" />
</shape>

View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/default_dialog_background_inset"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingLeft="32dp"
android:paddingTop="@dimen/medium_spacing"
android:paddingRight="32dp"
android:paddingBottom="@dimen/medium_spacing">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Your Seed"
android:textColor="@color/text"
android:textStyle="bold"
android:textSize="@dimen/medium_font_size" />
<TextView
android:id="@+id/seedTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/large_spacing"
android:text="habitat kiwi amply iceberg dog nerves spiderman soft match partial awakened maximum degrees"
android:textColor="@color/text"
android:textSize="@dimen/small_font_size"
android:textAlignment="center" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/large_spacing"
android:text="This is your personal password. It can be used to restore your account or migrate your account to a new device."
android:textColor="@color/text"
android:textSize="@dimen/small_font_size"
android:textAlignment="center"
android:alpha="0.6" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/large_spacing"
android:orientation="horizontal">
<Button
style="@style/UnimportantDialogButton"
android:id="@+id/cancelButton"
android:layout_width="0dp"
android:layout_height="@dimen/small_button_height"
android:layout_weight="1"
android:text="Cancel" />
<Button
style="@style/UnimportantDialogButton"
android:id="@+id/copyButton"
android:layout_width="0dp"
android:layout_height="@dimen/small_button_height"
android:layout_weight="1"
android:layout_marginLeft="@dimen/medium_spacing"
android:text="Copy" />
</LinearLayout>
</LinearLayout>

View File

@ -13,6 +13,9 @@
<color name="navigation_bar_background">#121212</color>
<color name="separator">#36383C</color>
<color name="unimportant_button_background">#323232</color>
<color name="dialog_background">#101011</color>
<color name="dialog_border">#212121</color>
<color name="unimportant_dialog_button_background">#1B1B1B</color>
<color name="fake_chat_bubble_background">#3F4146</color>
<color name="fake_chat_bubble_text">#000000</color>
<!-- Session -->

View File

@ -12,6 +12,7 @@
<dimen name="massive_font_size">50sp</dimen>
<!-- Element Sizes -->
<dimen name="small_button_height">34dp</dimen>
<dimen name="medium_button_height">48dp</dimen>
<dimen name="accent_line_thickness">4dp</dimen>
<dimen name="small_profile_picture_size">36dp</dimen>
@ -27,6 +28,8 @@
<dimen name="fake_chat_view_bubble_corner_radius">10dp</dimen>
<dimen name="fake_chat_view_height">234dp</dimen>
<dimen name="setting_button_height">72dp</dimen>
<dimen name="dialog_corner_radius">8dp</dimen>
<dimen name="dialog_button_corner_radius">4dp</dimen>
<!-- Distances -->
<dimen name="small_spacing">8dp</dimen>

View File

@ -63,6 +63,20 @@
<item name="android:textColor">@color/text</item>
</style>
<style name="UnimportantDialogButton">
<item name="android:background">@drawable/unimportant_dialog_button_background</item>
<item name="android:textAllCaps">false</item>
<item name="android:textSize">@dimen/small_font_size</item>
<item name="android:textColor">@color/text</item>
</style>
<style name="ProminentDialogButton">
<item name="android:background">@drawable/prominent_dialog_button_background</item>
<item name="android:textAllCaps">false</item>
<item name="android:textSize">@dimen/small_font_size</item>
<item name="android:textColor">@color/text</item>
</style>
<style name="SessionIDTextView">
<item name="android:background">@drawable/session_id_text_view_background</item>
<item name="android:padding">@dimen/medium_spacing</item>

View File

@ -28,6 +28,7 @@ import org.thoughtcrime.securesms.avatar.AvatarSelection
import org.thoughtcrime.securesms.crypto.ProfileKeyUtil
import org.thoughtcrime.securesms.database.Address
import org.thoughtcrime.securesms.database.DatabaseFactory
import org.thoughtcrime.securesms.loki.redesign.dialogs.SeedDialog
import org.thoughtcrime.securesms.loki.redesign.utilities.push
import org.thoughtcrime.securesms.loki.toPx
import org.thoughtcrime.securesms.mms.GlideApp
@ -62,31 +63,23 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
// region Lifecycle
override fun onCreate(savedInstanceState: Bundle?, isReady: Boolean) {
super.onCreate(savedInstanceState, isReady)
// Set content view
setContentView(R.layout.activity_settings)
// Set custom toolbar
setSupportActionBar(toolbar)
cancelButton.setOnClickListener { cancelEditingDisplayName() }
saveButton.setOnClickListener { saveDisplayName() }
showQRCodeButton.setOnClickListener { showQRCode() }
// Set up Glide
glide = GlideApp.with(this)
// Set up profile picture view
profilePictureView.glide = glide
profilePictureView.hexEncodedPublicKey = hexEncodedPublicKey
profilePictureView.isLarge = true
profilePictureView.update()
profilePictureView.setOnClickListener { showEditProfilePictureUI() }
// Set up display name container
displayNameContainer.setOnClickListener { showEditDisplayNameUI() }
// Set up display name text view
displayNameTextView.text = DatabaseFactory.getLokiUserDatabase(this).getDisplayName(hexEncodedPublicKey)
// Set up public key text view
publicKeyTextView.text = hexEncodedPublicKey
// Set up copy button
copyButton.setOnClickListener { copyPublicKey() }
// Set up share button
shareButton.setOnClickListener { sharePublicKey() }
seedButton.setOnClickListener { showSeed() }
}
public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
@ -244,5 +237,9 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() {
intent.type = "text/plain"
startActivity(intent)
}
private fun showSeed() {
SeedDialog().show(supportFragmentManager, "Seed Dialog")
}
// endregion
}

View File

@ -0,0 +1,51 @@
package org.thoughtcrime.securesms.loki.redesign.dialogs
import android.app.Dialog
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.support.v4.app.DialogFragment
import android.support.v7.app.AlertDialog
import android.view.LayoutInflater
import android.widget.Toast
import kotlinx.android.synthetic.main.dialog_seed.view.*
import network.loki.messenger.R
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
import org.whispersystems.signalservice.loki.crypto.MnemonicCodec
import org.whispersystems.signalservice.loki.utilities.hexEncodedPrivateKey
import java.io.File
class SeedDialog : DialogFragment() {
private val seed by lazy {
val languageFileDirectory = File(context!!.applicationInfo.dataDir)
var hexEncodedSeed = IdentityKeyUtil.retrieve(context!!, IdentityKeyUtil.lokiSeedKey)
if (hexEncodedSeed == null) {
hexEncodedSeed = IdentityKeyUtil.getIdentityKeyPair(context!!).hexEncodedPrivateKey // Legacy account
}
MnemonicCodec(languageFileDirectory).encode(hexEncodedSeed!!, MnemonicCodec.Language.Configuration.english)
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val builder = AlertDialog.Builder(context!!)
val contentView = LayoutInflater.from(context!!).inflate(R.layout.dialog_seed, null)
contentView.seedTextView.text = seed
contentView.cancelButton.setOnClickListener { dismiss() }
contentView.copyButton.setOnClickListener { copySeed() }
builder.setView(contentView)
val result = builder.create()
result.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
return result
}
private fun copySeed() {
val clipboard = activity!!.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("Seed", seed)
clipboard.primaryClip = clip
Toast.makeText(context!!, R.string.activity_register_public_key_copied_message, Toast.LENGTH_SHORT).show()
dismiss()
}
}