Skip to content

Commit 45bc069

Browse files
authored
Merge branch 'kaal-coder:main' into main
2 parents d77a188 + b51b999 commit 45bc069

File tree

68 files changed

+2395
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+2395
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
*.iml
2+
.gradle
3+
/local.properties
4+
/.idea/caches
5+
/.idea/libraries
6+
/.idea/modules.xml
7+
/.idea/workspace.xml
8+
/.idea/navEditor.xml
9+
/.idea/assetWizardSettings.xml
10+
.DS_Store
11+
/build
12+
/captures
13+
.externalNativeBuild
14+
.cxx
15+
local.properties
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
plugins {
2+
id("com.android.application")
3+
id("org.jetbrains.kotlin.android")
4+
}
5+
6+
android {
7+
namespace = "com.vinz.playerpedia"
8+
compileSdk = 33
9+
10+
defaultConfig {
11+
applicationId = "com.vinz.playerpedia"
12+
minSdk = 24
13+
targetSdk = 33
14+
versionCode = 1
15+
versionName = "1.0"
16+
17+
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
18+
}
19+
20+
buildTypes {
21+
release {
22+
isMinifyEnabled = false
23+
proguardFiles(
24+
getDefaultProguardFile("proguard-android-optimize.txt"),
25+
"proguard-rules.pro"
26+
)
27+
}
28+
}
29+
30+
buildFeatures {
31+
viewBinding = true
32+
}
33+
34+
compileOptions {
35+
sourceCompatibility = JavaVersion.VERSION_1_8
36+
targetCompatibility = JavaVersion.VERSION_1_8
37+
}
38+
kotlinOptions {
39+
jvmTarget = "1.8"
40+
}
41+
}
42+
43+
dependencies {
44+
45+
implementation("androidx.core:core-ktx:1.9.0")
46+
implementation("androidx.appcompat:appcompat:1.6.1")
47+
implementation("com.google.android.material:material:1.9.0")
48+
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
49+
testImplementation("junit:junit:4.13.2")
50+
androidTestImplementation("androidx.test.ext:junit:1.1.5")
51+
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
52+
53+
// glide
54+
implementation("com.github.bumptech.glide:glide:4.16.0")
55+
56+
// navigation
57+
val nav_version = "2.6.0"
58+
implementation("androidx.navigation:navigation-fragment-ktx:$nav_version")
59+
implementation("androidx.navigation:navigation-ui-ktx:$nav_version")
60+
61+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Add project specific ProGuard rules here.
2+
# You can control the set of applied configuration files using the
3+
# proguardFiles setting in build.gradle.
4+
#
5+
# For more details, see
6+
# http://developer.android.com/guide/developing/tools/proguard.html
7+
8+
# If your project uses WebView with JS, uncomment the following
9+
# and specify the fully qualified class name to the JavaScript interface
10+
# class:
11+
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12+
# public *;
13+
#}
14+
15+
# Uncomment this to preserve the line number information for
16+
# debugging stack traces.
17+
#-keepattributes SourceFile,LineNumberTable
18+
19+
# If you keep the line number information, uncomment this to
20+
# hide the original source file name.
21+
#-renamesourcefileattribute SourceFile
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.vinz.playerpedia
2+
3+
import androidx.test.platform.app.InstrumentationRegistry
4+
import androidx.test.ext.junit.runners.AndroidJUnit4
5+
6+
import org.junit.Test
7+
import org.junit.runner.RunWith
8+
9+
import org.junit.Assert.*
10+
11+
/**
12+
* Instrumented test, which will execute on an Android device.
13+
*
14+
* See [testing documentation](http://d.android.com/tools/testing).
15+
*/
16+
@RunWith(AndroidJUnit4::class)
17+
class ExampleInstrumentedTest {
18+
@Test
19+
fun useAppContext() {
20+
// Context of the app under test.
21+
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22+
assertEquals("com.vinz.playerpedia", appContext.packageName)
23+
}
24+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools">
4+
5+
<uses-permission android:name="android.permission.INTERNET" />
6+
7+
<queries>
8+
<intent>
9+
<action android:name="android.intent.action.VIEW" />
10+
11+
<data android:scheme="https" />
12+
</intent>
13+
</queries>
14+
15+
<application
16+
android:allowBackup="true"
17+
android:dataExtractionRules="@xml/data_extraction_rules"
18+
android:fullBackupContent="@xml/backup_rules"
19+
android:icon="@mipmap/ic_launcher"
20+
android:label="@string/app_name"
21+
android:roundIcon="@mipmap/ic_launcher_round"
22+
android:supportsRtl="true"
23+
android:theme="@style/Theme.PlayerPedia"
24+
tools:targetApi="31">
25+
<activity
26+
android:name=".activity.PlayerDataActivity"
27+
android:exported="false" />
28+
<activity
29+
android:name=".activity.DetailActivity"
30+
android:exported="false" />
31+
<activity
32+
android:name=".activity.MainActivity"
33+
android:exported="true">
34+
<intent-filter>
35+
<action android:name="android.intent.action.MAIN" />
36+
37+
<category android:name="android.intent.category.LAUNCHER" />
38+
</intent-filter>
39+
</activity>
40+
</application>
41+
42+
</manifest>
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.vinz.playerpedia.activity
2+
3+
import android.content.Intent
4+
import android.net.Uri
5+
import android.os.Bundle
6+
import android.widget.Toast
7+
import androidx.appcompat.app.AppCompatActivity
8+
import com.bumptech.glide.Glide
9+
import com.vinz.playerpedia.data.PlayerWordData
10+
import com.vinz.playerpedia.databinding.ActivityDetailBinding
11+
12+
class DetailActivity : AppCompatActivity() {
13+
14+
private lateinit var binding: ActivityDetailBinding
15+
16+
@Suppress("DEPRECATION")
17+
override fun onCreate(savedInstanceState: Bundle?) {
18+
super.onCreate(savedInstanceState)
19+
binding = ActivityDetailBinding.inflate(layoutInflater)
20+
setContentView(binding.root)
21+
22+
val player = intent.getParcelableExtra<PlayerWordData>("player") as PlayerWordData
23+
24+
Glide.with(this)
25+
.load(player.playerWordImageResourceId)
26+
.into(binding.ivPlayer)
27+
28+
binding.tvPlayerName.text = player.playerWordName
29+
binding.tvPlayerClub.text = player.playerWordClub
30+
binding.tvPlayerPosition.text = player.playerWordPosition
31+
binding.tvPlayerNationally.text = player.playerWordNationality
32+
binding.tvPlayerDescription.text = player.playerWordDescription
33+
34+
binding.btnBack.setOnClickListener {
35+
onBackPressed()
36+
}
37+
38+
binding.btnSearchGoogle.setOnClickListener {
39+
val playerName = player.playerWordName
40+
41+
// Buat URL pencarian Google dengan data player.playerWordName
42+
val searchQuery = "https://www.google.com/search?q=${playerName}"
43+
44+
// Buat intent untuk membuka browser dengan URL pencarian Google
45+
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(searchQuery))
46+
47+
// Periksa apakah ada aplikasi browser yang dapat menangani intent ini
48+
if (intent.resolveActivity(this.packageManager) != null) {
49+
startActivity(intent)
50+
} else {
51+
// Jika tidak ada aplikasi browser yang dapat menangani intent ini
52+
// Tampilkan pesan kesalahan atau lakukan tindakan lain sesuai kebutuhan Anda
53+
// Misalnya, tampilkan pesan toast bahwa tidak ada browser yang tersedia.
54+
Toast.makeText(this, "Tidak ada browser yang tersedia.", Toast.LENGTH_SHORT).show()
55+
}
56+
}
57+
}
58+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package com.vinz.playerpedia.activity
2+
3+
import android.content.Intent
4+
import androidx.appcompat.app.AppCompatActivity
5+
import android.os.Bundle
6+
import androidx.navigation.findNavController
7+
import androidx.recyclerview.widget.GridLayoutManager
8+
import androidx.recyclerview.widget.LinearLayoutManager
9+
import androidx.recyclerview.widget.RecyclerView
10+
import com.vinz.playerpedia.R
11+
import com.vinz.playerpedia.adapter.PlayerAdapter
12+
import com.vinz.playerpedia.data.PlayerDummyData
13+
import com.vinz.playerpedia.data.PlayerWordStart
14+
import com.vinz.playerpedia.databinding.ActivityMainBinding
15+
16+
class MainActivity : AppCompatActivity() {
17+
18+
private lateinit var binding : ActivityMainBinding
19+
20+
private lateinit var playerAdapter: PlayerAdapter
21+
private lateinit var recyclerView: RecyclerView
22+
23+
private var isLinearLayoutManager = true
24+
25+
override fun onCreate(savedInstanceState: Bundle?) {
26+
super.onCreate(savedInstanceState)
27+
binding = ActivityMainBinding.inflate(layoutInflater)
28+
setContentView(binding.root)
29+
30+
recyclerView = binding.rvWords
31+
recyclerView.setHasFixedSize(true)
32+
recyclerView.layoutManager = LinearLayoutManager(this)
33+
playerAdapter = PlayerAdapter(PlayerDummyData.playerDummy)
34+
recyclerView.adapter = playerAdapter
35+
36+
binding.btnChangeView.setOnClickListener {
37+
isLinearLayoutManager = !isLinearLayoutManager
38+
setLayout()
39+
}
40+
41+
playerAdapter.setOnItemClickCallback(object : PlayerAdapter.OnItemClickCallback {
42+
override fun onItemClicked(data: PlayerWordStart) {
43+
// Tambahkan kode untuk membuka detail makanan
44+
showSelectedWord(data)
45+
}
46+
})
47+
}
48+
49+
private fun setLayout() {
50+
if (isLinearLayoutManager) {
51+
recyclerView.layoutManager = LinearLayoutManager(this)
52+
binding.btnChangeView.setImageResource(R.drawable.ic_grid)
53+
} else {
54+
recyclerView.layoutManager = GridLayoutManager(this, 2)
55+
binding.btnChangeView.setImageResource(R.drawable.ic_list)
56+
}
57+
}
58+
59+
private fun showSelectedWord(player: PlayerWordStart) {
60+
val intent = Intent(this, PlayerDataActivity::class.java)
61+
val playerLetterToFind = player.playerLetter
62+
intent.putExtra("playerData", playerLetterToFind)
63+
startActivity(intent)
64+
}
65+
66+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.vinz.playerpedia.activity
2+
3+
import android.content.Intent
4+
import android.os.Bundle
5+
import android.util.Log
6+
import androidx.appcompat.app.AppCompatActivity
7+
import androidx.navigation.findNavController
8+
import androidx.recyclerview.widget.LinearLayoutManager
9+
import androidx.recyclerview.widget.RecyclerView
10+
import com.vinz.playerpedia.R
11+
import com.vinz.playerpedia.adapter.PlayerDataAdapter
12+
import com.vinz.playerpedia.data.PlayerDummyData
13+
import com.vinz.playerpedia.data.PlayerWordData
14+
import com.vinz.playerpedia.databinding.ActivityPlayerDataBinding
15+
16+
class PlayerDataActivity : AppCompatActivity() {
17+
private lateinit var binding: ActivityPlayerDataBinding
18+
19+
private lateinit var playerDataAdapter: PlayerDataAdapter
20+
private lateinit var recyclerView: RecyclerView
21+
22+
override fun onCreate(savedInstanceState: Bundle?) {
23+
super.onCreate(savedInstanceState)
24+
binding = ActivityPlayerDataBinding.inflate(layoutInflater)
25+
setContentView(binding.root)
26+
27+
val playerLetter = intent.getStringExtra("playerData")
28+
29+
val filteredPlayers = PlayerDummyData.playerDummy.filter { playerWordStart ->
30+
playerWordStart.playerLetter == playerLetter
31+
}
32+
33+
recyclerView = binding.rvPlayerName
34+
recyclerView.setHasFixedSize(true)
35+
recyclerView.layoutManager = LinearLayoutManager(this)
36+
playerDataAdapter = PlayerDataAdapter(filteredPlayers[0].playerWordList)
37+
recyclerView.adapter = playerDataAdapter
38+
39+
playerDataAdapter.setOnItemClickCallback(object : PlayerDataAdapter.OnItemClickCallback {
40+
override fun onItemClicked(data: PlayerWordData) {
41+
// Tambahkan kode untuk membuka detail makanan
42+
showSelectedPlayer(data)
43+
}
44+
})
45+
46+
binding.btnBack.setOnClickListener {
47+
onBackPressed()
48+
}
49+
}
50+
51+
private fun showSelectedPlayer(player: PlayerWordData) {
52+
val intent = Intent(this, DetailActivity::class.java)
53+
intent.putExtra("player", player)
54+
startActivity(intent)
55+
}
56+
}

0 commit comments

Comments
 (0)