diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..cec0517
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+android_2026_1
\ No newline at end of file
diff --git a/.idea/AndroidProjectSystem.xml b/.idea/AndroidProjectSystem.xml
new file mode 100644
index 0000000..4a53bee
--- /dev/null
+++ b/.idea/AndroidProjectSystem.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..b86273d
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
new file mode 100644
index 0000000..b268ef3
--- /dev/null
+++ b/.idea/deploymentTargetSelector.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..639c779
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/markdown.xml b/.idea/markdown.xml
new file mode 100644
index 0000000..c61ea33
--- /dev/null
+++ b/.idea/markdown.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/migrations.xml b/.idea/migrations.xml
new file mode 100644
index 0000000..f8051a6
--- /dev/null
+++ b/.idea/migrations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..74dd639
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..16660f1
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index cc8ee59..fb64ff6 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -40,4 +40,6 @@ dependencies {
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
+ implementation("com.squareup.retrofit2:retrofit:3.0.0")
+ implementation("com.squareup.retrofit2:converter-gson:3.0.0")
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e58d838..e67c3a7 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,7 +1,7 @@
-
+
()
+ private lateinit var nameAdapter: NameAdapter
+
+ @SuppressLint("NotifyDataSetChanged")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- enableEdgeToEdge()
setContentView(R.layout.activity_main)
- 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
+
+ etSearch = findViewById(R.id.et_search)
+ btnSearch = findViewById(R.id.btn_search)
+ rvUsers = findViewById(R.id.rv_users)
+
+ rvUsers.layoutManager = LinearLayoutManager(this)
+ nameAdapter = NameAdapter(userList) { selectedName: String ->
+ etSearch.setText(selectedName)
+ etSearch.setSelection(selectedName.length)
+ }
+ rvUsers.adapter = nameAdapter
+
+ etSearch.addTextChangedListener(object : TextWatcher {
+ override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
+ override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
+ val query: String = s?.toString() ?: ""
+ if (query.isNotEmpty()) {
+ lifecycleScope.launch {
+ try {
+ val response: UserSearchResponse = RetrofitClient.api.searchUsers(query)
+ val items: List? = response.items
+ if (items != null) {
+ userList.clear()
+ for (item in items) {
+ userList.add(item.login)
+ }
+ nameAdapter.notifyDataSetChanged()
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ } else {
+ userList.clear()
+ nameAdapter.notifyDataSetChanged()
+ }
+ }
+ override fun afterTextChanged(s: Editable?) {}
+ })
+
+ btnSearch.setOnClickListener {
+ val name: String = etSearch.text.toString()
+ if (name.isNotEmpty()) {
+ val intent = Intent(
+ Intent.ACTION_VIEW,
+ "https://github.com/$name?tab=repositories".toUri()
+ )
+ startActivity(intent)
+ }
}
}
-}
\ No newline at end of file
+}
+
+interface GithubApi {
+ @GET("search/users")
+ suspend fun searchUsers(
+ @Query("q") query: String,
+ @Query("per_page") perPage: Int = 20
+ ): UserSearchResponse
+}
+
+data class UserSearchResponse(
+ @SerializedName("items") val items: List?
+)
+
+data class UserItem(
+ @SerializedName("login") val login: String
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_2026_1/NameAdpater.kt b/app/src/main/java/com/example/android_2026_1/NameAdpater.kt
new file mode 100644
index 0000000..dd2943e
--- /dev/null
+++ b/app/src/main/java/com/example/android_2026_1/NameAdpater.kt
@@ -0,0 +1,35 @@
+package com.example.android_2026_1
+
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+
+class NameAdapter(
+ private val userList: List,
+ private val onItemClick: (String) -> Unit
+) : RecyclerView.Adapter() {
+
+ class NameViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NameViewHolder {
+ val textView = TextView(parent.context).apply {
+ layoutParams = ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT
+ )
+ setPadding(50, 40, 50, 40)
+ textSize = 16f
+ }
+ return NameViewHolder(textView)
+ }
+
+ override fun onBindViewHolder(holder: NameViewHolder, position: Int) {
+ val name = userList[position]
+ holder.textView.text = name
+ holder.textView.setOnClickListener {
+ onItemClick(name)
+ }
+ }
+
+ override fun getItemCount(): Int = userList.size
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 9affce0..c30527c 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,10 +1,35 @@
-
+ android:orientation="vertical"
+ android:padding="16dp">
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
\ No newline at end of file