Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<queries>
<package android:name="org.telegram.messenger" />
</queries>

<uses-feature
android:name="android.hardware.camera"
android:required="false" />

<uses-permission android:name="android.permission.CAMERA" />

<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
Expand All @@ -22,6 +32,7 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".FillFormActivity" />
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -1,20 +1,69 @@
package otus.gpb.homework.activities

import android.Manifest
import android.graphics.BitmapFactory
import android.net.Uri
import android.os.Bundle
import android.widget.ImageView
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import android.widget.TextView
import android.content.Intent
import android.widget.Button

class EditProfileActivity : AppCompatActivity() {

private val requestCameraPermissionLauncher =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGanted ->
if (isGanted) {
imageView.setImageResource(R.drawable.cat)
} else {
showCameraRationaleDialog()
}
}
private var selectedImageUri: Uri? = null

private val pickImageLauncher =
registerForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? ->
uri?.let {
selectedImageUri = it
populateImage(it)
}
}

private val fillFormLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == RESULT_OK) {
val data = result.data
findViewById<TextView>(R.id.textview_name).text = data?.getStringExtra("name")
findViewById<TextView>(R.id.textview_surname).text = data?.getStringExtra("surname")
findViewById<TextView>(R.id.textview_age).text = data?.getStringExtra("age")
}
}


private lateinit var imageView: ImageView

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_edit_profile)
imageView = findViewById(R.id.imageview_photo)
imageView.setOnClickListener {
val items = arrayOf("Сделать фото", "Выбрать фото")
MaterialAlertDialogBuilder(this).setTitle("Выберите действие")
.setItems(items) { dialog, which ->
when (which) {
0 -> requestCameraPermissionLauncher.launch(Manifest.permission.CAMERA)
1 -> pickImageLauncher.launch("image/*")
}
}.show()
findViewById<Button>(R.id.button4).setOnClickListener {
val intent = Intent(this, FillFormActivity::class.java)
fillFormLauncher.launch(intent)
}
}

findViewById<Toolbar>(R.id.toolbar).apply {
inflateMenu(R.menu.menu)
Expand All @@ -24,12 +73,24 @@ class EditProfileActivity : AppCompatActivity() {
openSenderApp()
true
}

else -> false
}
}
}
}

private fun showCameraRationaleDialog() {
MaterialAlertDialogBuilder(this).setTitle("Доступ к камере")
.setMessage("Чтобы сделать фото, разрешите использование")
.setPositiveButton("Дать доступ") { dialog, _ ->
requestCameraPermissionLauncher.launch(Manifest.permission.CAMERA)
dialog.dismiss()
}.setNegativeButton("Отмена") { dialog, _ ->
dialog.dismiss()
}.show()
}

/**
* Используйте этот метод чтобы отобразить картинку полученную из медиатеки в ImageView
*/
Expand All @@ -39,6 +100,26 @@ class EditProfileActivity : AppCompatActivity() {
}

private fun openSenderApp() {
TODO("В качестве реализации метода отправьте неявный Intent чтобы поделиться профилем. В качестве extras передайте заполненные строки и картинку")
val name = findViewById<TextView>(R.id.textview_name).text.toString()
val surname = findViewById<TextView>(R.id.textview_surname).text.toString()
val age = findViewById<TextView>(R.id.textview_age).text.toString()

val profileText = "Имя: $name\nФамилия: $surname\nВозраст: $age"
val sendIntent = Intent(Intent.ACTION_SEND).apply {
type = "image/*"
putExtra(Intent.EXTRA_TEXT, profileText)
selectedImageUri?.let {
putExtra(Intent.EXTRA_STREAM, it)
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
}
setPackage("org.telegram.messenger")
}
val telegramApp = packageManager.resolveActivity(sendIntent, 0)
if (telegramApp != null) {
startActivity(sendIntent)
} else {
val chooser = Intent.createChooser(sendIntent, "Отправить профиль через:")
startActivity(chooser)
}
}
}
32 changes: 32 additions & 0 deletions app/src/main/java/otus/gpb/homework/activities/FillFormActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package otus.gpb.homework.activities

import android.content.Intent
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity

class FillFormActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_fill_form)

val nameInput = findViewById<EditText>(R.id.edit_name)
val surnameInput = findViewById<EditText>(R.id.edit_surname)
val ageInput = findViewById<EditText>(R.id.edit_age)
val buttonApply = findViewById<Button>(R.id.button_apply)


buttonApply.setOnClickListener {
val data = Intent().apply {
putExtra("name", nameInput.text.toString())
putExtra("surname", surnameInput.text.toString())
putExtra("age", ageInput.text.toString())
}
setResult(RESULT_OK, data)
finish()

}
}
}
15 changes: 8 additions & 7 deletions app/src/main/res/layout/activity_edit_profile.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
android:layout_height="160dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:contentDescription="@string/photo_description"
android:scaleType="centerCrop"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar"
Expand All @@ -35,8 +36,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:hint="Имя"
android:textSize="18dp"
android:hint="@string/hint_name"
android:textSize="18sp"
app:layout_constraintStart_toEndOf="@+id/imageview_photo"
app:layout_constraintTop_toTopOf="@+id/imageview_photo" />

Expand All @@ -45,8 +46,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:hint="Фамилия"
android:textSize="18dp"
android:hint="@string/hint_surname"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="@+id/textview_name"
app:layout_constraintTop_toBottomOf="@+id/textview_name" />

Expand All @@ -55,8 +56,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:hint="Возраст"
android:textSize="18dp"
android:hint="@string/hint_age"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="@+id/textview_surname"
app:layout_constraintTop_toBottomOf="@+id/textview_surname" />

Expand All @@ -66,7 +67,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Редактировать профиль"
android:text="@string/button_edit_profile"
app:layout_constraintStart_toStartOf="@+id/textview_age"
app:layout_constraintTop_toBottomOf="@+id/textview_age" />

Expand Down
40 changes: 40 additions & 0 deletions app/src/main/res/layout/activity_fill_form.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?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:orientation="vertical"
android:padding="16dp">

<EditText
android:id="@+id/edit_name"
android:autofillHints="name"
android:hint="@string/hint_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName" />

<EditText
android:id="@+id/edit_surname"
android:autofillHints="surname"
android:hint="@string/hint_surname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:inputType="textPersonName" />

<EditText
android:id="@+id/edit_age"
android:autofillHints="age"
android:hint="@string/hint_age"
android:inputType="number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp" />

<Button
android:id="@+id/button_apply"
android:text="@string/button_apply"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp" />
</LinearLayout>
6 changes: 6 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
<resources>
<string name="app_name">Activities</string>
<string name="title_send">Отправить</string>
<string name="hint_name">Имя</string>
<string name="hint_surname">Фамилия</string>
<string name="hint_age">Возраст</string>
<string name="button_apply">Применить</string>
<string name="photo_description">Фото профиля</string>
<string name="button_edit_profile">Редактировать профиль</string>
</resources>