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
3 changes: 2 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ plugins {
}

android {
compileSdk 34
compileSdk 35

defaultConfig {
applicationId "otus.gpb.homework.activities"
Expand Down Expand Up @@ -60,4 +60,5 @@ dependencies {
implementation 'androidx.activity:activity-ktx:1.9.0'
implementation 'androidx.fragment:fragment-ktx:1.7.1'
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'androidx.activity:activity:1.10.0'
}
9 changes: 9 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<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 @@ -12,6 +18,9 @@
android:supportsRtl="true"
android:theme="@style/Theme.Activities"
tools:targetApi="31">
<activity
android:name=".FillFormActivity"
android:exported="false" />

<activity
android:name=".EditProfileActivity"
Expand Down
112 changes: 111 additions & 1 deletion app/src/main/java/otus/gpb/homework/activities/EditProfileActivity.kt
Original file line number Diff line number Diff line change
@@ -1,20 +1,43 @@
package otus.gpb.homework.activities

import android.Manifest
import android.app.Activity
import android.content.Intent
import android.graphics.BitmapFactory
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.provider.Settings
import android.util.Log
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.core.content.ContextCompat.startActivity
import androidx.core.net.toUri
import com.google.android.material.dialog.MaterialAlertDialogBuilder

class EditProfileActivity : AppCompatActivity() {

private lateinit var imageView: ImageView
private lateinit var editProfile: Button
private lateinit var userFirstName: TextView
private lateinit var userSurName: TextView
private lateinit var userBirthday: TextView
private var pictureUri: Uri? = null

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

imageView = findViewById(R.id.imageview_photo)
editProfile = findViewById(R.id.Edit_profile_button)
userFirstName = findViewById(R.id.textview_name )
userSurName = findViewById(R.id.textview_surname )
userBirthday = findViewById(R.id.textview_age )


findViewById<Toolbar>(R.id.toolbar).apply {
inflateMenu(R.menu.menu)
Expand All @@ -28,6 +51,26 @@ class EditProfileActivity : AppCompatActivity() {
}
}
}
imageView.setOnClickListener {
val items = arrayOf("Сделать фото", "Выбрать фото")
MaterialAlertDialogBuilder(this)
.setTitle("Сделать/показать фото")
.setItems(items) { _, which ->
when (which) {
0 -> { setCameraPermission.launch(Manifest.permission.CAMERA) }
1 -> {
val pickImg = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI)
showPicture.launch(pickImg)
}
}
}
.show()
}

editProfile.setOnClickListener(){
val fillForm = Intent(this, FillFormActivity::class.java)
fillFormAct.launch( fillForm )
}
}

/**
Expand All @@ -39,6 +82,73 @@ class EditProfileActivity : AppCompatActivity() {
}

private fun openSenderApp() {
TODO("В качестве реализации метода отправьте неявный Intent чтобы поделиться профилем. В качестве extras передайте заполненные строки и картинку")

val textToSend = "${userFirstName.text} ${userSurName.text} ${userBirthday.text}"
val shareIntent = Intent(Intent.ACTION_SEND).apply {
setPackage("org.telegram.messenger")
setType("image/*")
if ( pictureUri != null) putExtra(Intent.EXTRA_STREAM, pictureUri )
putExtra(Intent.EXTRA_TEXT, textToSend )
}
startActivity( shareIntent )

}

private val fillFormAct = registerForActivityResult( ActivityResultContracts.StartActivityForResult()) {
result->
if ( result.resultCode == Activity.RESULT_OK) {
val data = result.data
userFirstName.text = data?.getStringExtra("firstname")
userSurName.text = data?.getStringExtra("surname")
userBirthday.text = data?.getStringExtra("birthday")
val sendText = "${userFirstName.text} ${userSurName.text} ${userBirthday.text}"
Log.d( "VPM_Log", sendText )

}
}


private val setCameraPermission = registerForActivityResult( ActivityResultContracts.RequestPermission() ) {
isPermit ->
when (isPermit) {
true -> findViewById<ImageView>( R.id.imageview_photo ).setImageResource( R.drawable.cat )
false -> if ( shouldShowRequestPermissionRationale(Manifest.permission.CAMERA )) {
clarifyingDialog()
} else { settingsDialog() }
}
}

private val showPicture = registerForActivityResult( ActivityResultContracts.StartActivityForResult()) {
result->
if ( result.resultCode == Activity.RESULT_OK) {
val imgUri = result.data?.data
if( imgUri != null ){
pictureUri = imgUri
populateImage( imgUri )
}
}
}

private fun clarifyingDialog() {
MaterialAlertDialogBuilder(this)
.setTitle("Камера отключена")
.setMessage("Необходимо настроить разрешение для камеры")
.setPositiveButton("Настроить разрешение") { dialog, which ->
setCameraPermission.launch(Manifest.permission.CAMERA)
}
.setNegativeButton("Отмена") { dialog, _ ->
dialog.dismiss()
}.show()
}

private fun settingsDialog() {
MaterialAlertDialogBuilder(this)
.setCancelable( true )
.setTitle("Камера отключена")
.setMessage("Необходимо настроить разрешение для камеры")
.setPositiveButton("Открыть настройки") { dialog, which ->
startActivity( Intent( Settings.ACTION_APPLICATION_DETAILS_SETTINGS, "package:$packageName".toUri() ))
}
.show()
}
}
43 changes: 43 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,43 @@
package otus.gpb.homework.activities

import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

class FillFormActivity : AppCompatActivity() {

private lateinit var applyButton: Button
private lateinit var firstName: EditText
private lateinit var surName: EditText
private lateinit var birthday: EditText

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_fill_form)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}

applyButton = findViewById( R.id.Apply_button)
firstName = findViewById( R.id.Firstname_input )
surName = findViewById( R.id.Surname_input )
birthday = findViewById( R.id.Birthday_input )
applyButton.setOnClickListener {
val resultIntent = Intent()
resultIntent.putExtra("firstname", firstName.text.toString() )
resultIntent.putExtra("surname" , surName.text.toString() )
resultIntent.putExtra("birthday" , birthday.text.toString() )
setResult(Activity.RESULT_OK, resultIntent)
finish()
}
}
}
2 changes: 1 addition & 1 deletion app/src/main/res/layout/activity_edit_profile.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
app:layout_constraintTop_toBottomOf="@+id/textview_surname" />

<Button
android:id="@+id/button4"
android:id="@+id/Edit_profile_button"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
Expand Down
57 changes: 57 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,57 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAlignment="center"
tools:context=".FillFormActivity">

<EditText
android:id="@+id/Surname_input"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="68dp"
android:hint="Surname"
android:inputType="text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/Firstname_input" />

<EditText
android:id="@+id/Firstname_input"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:hint="Firstname"
android:inputType="text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<EditText
android:id="@+id/Birthday_input"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="68dp"
android:hint="Birtday date"
android:inputType="text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/Surname_input" />

<Button
android:id="@+id/Apply_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="268dp"
android:text="Применить"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/Birthday_input" />
</androidx.constraintlayout.widget.ConstraintLayout>