Skip to content

Homework5 добавил видео #9

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
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
24 changes: 19 additions & 5 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-parcelize'
id 'androidx.navigation.safeargs.kotlin'
}

android {
compileSdk 30
compileSdk 31

defaultConfig {
applicationId "com.itis.androidlabproject"
minSdk 23
targetSdk 30
targetSdk 31
versionCode 1
versionName "1.0"

Expand All @@ -36,13 +38,25 @@ android {
}

dependencies {
// Navigation
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'

implementation 'androidx.core:core-ktx:1.6.0'
//Glide
implementation 'com.github.bumptech.glide:glide:4.12.0'
implementation "com.squareup.okhttp3:okhttp:5.0.0-alpha.2"

implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
implementation 'android.arch.navigation:navigation-fragment:2.3.5'
implementation 'android.arch.navigation:navigation-ui:2.3.5'

implementation 'androidx.recyclerview:recyclerview:1.2.1'

implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
implementation 'de.hdodenhof:circleimageview:3.1.0'
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0'

testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
Expand Down
4 changes: 3 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itis.androidlabproject">

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

<application
android:allowBackup="true"
Expand All @@ -10,7 +12,7 @@
android:supportsRtl="true"
android:theme="@style/Theme.AndroidLabProject">
<activity
android:name=".MainActivity"
android:name=".activity.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
Expand Down
11 changes: 0 additions & 11 deletions app/src/main/java/com/itis/androidlabproject/MainActivity.kt

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.itis.androidlabproject.activity

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.NavController
import com.itis.androidlabproject.R
import com.itis.androidlabproject.databinding.ActivityMainBinding
import com.itis.androidlabproject.extension.findNavController

class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var navController: NavController

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater).also {
setContentView(it.root)
}

navController = findNavController(R.id.fragment_container)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.itis.androidlabproject.adapter

import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.RequestManager
import com.itis.androidlabproject.model.Planet

class PlanetAdapter(
private val list: List<Planet>,
private val glide: RequestManager,
private val action: (Int) -> Unit
) : RecyclerView.Adapter<PlanetHolder>() {

override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): PlanetHolder = PlanetHolder.create(parent, glide, action)

override fun onBindViewHolder(holder: PlanetHolder, position: Int) {
holder.bind(list[position])
}

override fun getItemCount(): Int = list.size;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.itis.androidlabproject.adapter

import android.annotation.SuppressLint
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Priority
import com.bumptech.glide.RequestManager
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.request.RequestOptions
import com.itis.androidlabproject.databinding.ItemPlanetBinding
import com.itis.androidlabproject.model.Planet

class PlanetHolder(
private val binding: ItemPlanetBinding,
private val glige: RequestManager,
private val action: (Int) -> Unit
) : RecyclerView.ViewHolder(binding.root) {
private var planet: Planet? = null

private val options = RequestOptions()
.priority(Priority.HIGH)
.diskCacheStrategy(DiskCacheStrategy.ALL)

init {
itemView.setOnClickListener {
planet?.run {
action(this.id)
}
}
}

@SuppressLint("SetTextI18n")
fun bind(item: Planet) {
this.planet = item
with(binding) {
tvDetName.text = item.name
tvNumberOfSatellite.text = "Количество спутников: ${item.numberOfSatellite}"

glige.load(item.url)
.apply(options)
.into(ivImage)
}
}

companion object {
fun create(
parent: ViewGroup,
glige: RequestManager,
action: (Int) -> Unit
) = PlanetHolder(
ItemPlanetBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
),
glige,
action
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.itis.androidlabproject.extension

import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment

fun AppCompatActivity.findNavController(id: Int): NavController {
return (supportFragmentManager.findFragmentById(id) as NavHostFragment).navController
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.itis.androidlabproject.fragment

import android.annotation.SuppressLint
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.bumptech.glide.Glide
import com.itis.androidlabproject.databinding.FragmentDetailsBinding
import com.itis.androidlabproject.model.Planet
import com.itis.androidlabproject.repository.PlanetRepository

class DetailsFragment : Fragment() {
private lateinit var binding: FragmentDetailsBinding

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

binding.run {
arguments?.getInt("planetId")?.let { planetId ->
PlanetRepository.getPlanetById(planetId).let {
showChosenPlanet(it)
}
}
}

}

@SuppressLint("SetTextI18n")
private fun showChosenPlanet(planet: Planet) {
with(binding) {
Glide.with(this.root).load(planet.url).into(ivPhoto)
tvDetName.text = "Название планеты: ${planet.name}"
tvDetNumberOfSatellite.text = "Количество спутников ${planet.numberOfSatellite}"
tvDetDescription.text = "Описание: ${planet.description}"
collapsingToolbar.title = planet.name
}
}

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentDetailsBinding.inflate(inflater, container, false)
return binding.root
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.itis.androidlabproject.fragment

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.os.bundleOf
import androidx.fragment.app.Fragment
import androidx.navigation.NavOptions
import androidx.navigation.fragment.findNavController
import com.bumptech.glide.Glide
import com.itis.androidlabproject.R
import com.itis.androidlabproject.adapter.PlanetAdapter
import com.itis.androidlabproject.databinding.FragmentListBinding
import com.itis.androidlabproject.repository.PlanetRepository

class ListFragment : Fragment(R.layout.fragment_list) {
private lateinit var binding: FragmentListBinding
private lateinit var adapter: PlanetAdapter

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentListBinding.inflate(inflater, container, false)
adapter = PlanetAdapter(PlanetRepository.planets, Glide.with(this)) {
showPlanetDetails(it);
}
binding.rvPlanets.adapter = adapter

return binding.root
}

private fun showPlanetDetails(id: Int) {
val bundle = bundleOf(
"planetId" to id
)

val options = NavOptions.Builder()
.setLaunchSingleTop(false)
.setEnterAnim(R.anim.enter_from_right)
.setExitAnim(R.anim.fade_out)
.setPopEnterAnim(R.anim.fade_in)
.setPopExitAnim(R.anim.exit_to_right)
.build()
findNavController().navigate(R.id.action_listFragment_to_detailsFragment, bundle, options)
}
}
9 changes: 9 additions & 0 deletions app/src/main/java/com/itis/androidlabproject/model/Planet.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.itis.androidlabproject.model

data class Planet(
var id: Int,
var name: String,
val numberOfSatellite: Int = 0,
var url: String,
var description: String
)
Loading