Skip to content

Commit b771f4a

Browse files
authored
Merge pull request #6 from msnodeve/develop
[Merge] Release: develop-> master 앱 업데이트 완료
2 parents 1867662 + 2cd9c0c commit b771f4a

44 files changed

Lines changed: 777 additions & 102 deletions

Some content is hidden

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

README.md

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,48 @@
44
<a href='https://play.google.com/store/apps/details?id=com.seok.gfd&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='다운로드하기 Google Play' src='https://play.google.com/intl/ko/badges/images/generic/ko_badge_web_generic.png' width="15%"/></a>
55

66
***
7+
</br></br>
78

89
# Release
910

10-
v2.17.7 릴리즈 [Google Paly Store](https://play.google.com/store/apps/details?id=com.seok.gfd)
11+
v3.20.12 릴리즈 [Google Paly Store](https://play.google.com/store/apps/details?id=com.seok.gfd)
12+
13+
</br></br>
1114

1215
# Preview
1316

14-
<img src="./img/preview05.png" width="40%" height="40%">
17+
<img src="./img/preview07.png" width="40%" height="40%">
18+
<img src="./img/preview06.png" width="40%" height="40%">
1519
<img src="./img/preview04.png" width="40%" height="40%">
1620
<img src="./img/preview03.png" width="40%" height="40%">
1721

22+
</br></br>
1823

1924
# Notice
2025

2126
v1.6.2 릴리즈 작업 완료
27+
2228
- Backend 작업
2329
- UX/UI 개선 작업
2430
- 자동 로그인 구현
2531

2632
v1.10.3 릴리즈 작업 완료
33+
2734
- 금일 커밋 랭킹 서비스 구축
2835
- 프로필, 랭킹 프래그먼트로 분리
2936

3037
v2.16.6 릴리즈 작업 완료
38+
3139
- 대대적인 UI/UX 개선
3240
- 도움을 주신 분 탭 추가
3341
- 앱 성능 최적화
3442

3543
v.2.17.7
44+
3645
- Github Contribution 그래프 UI 변경
3746
- 랭킹 서비스 오류로 인해 수정 진행 중
47+
48+
v.3.20.12
49+
50+
- Guest 사용자 서비스
51+
- UI 추가

app/build.gradle

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ android {
1818
applicationId "com.seok.gfd"
1919
minSdkVersion 26
2020
targetSdkVersion 28
21-
versionCode 7
22-
versionName "2.17.7"
21+
versionCode 10
22+
versionName "3.20.12"
2323
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
2424
}
2525
buildTypes {
@@ -150,5 +150,4 @@ dependencies {
150150
// Tab Layout
151151
implementation 'com.ogaclejapan.smarttablayout:library:2.0.0@aar'
152152
implementation 'com.ogaclejapan.smarttablayout:utils-v4:2.0.0@aar'
153-
154153
}

app/src/main/AndroidManifest.xml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,20 @@
88
<application
99
android:allowBackup="true"
1010
android:fullBackupContent="@xml/backup_descriptor"
11-
android:icon="@drawable/gfd_logo_foreground"
11+
android:icon="@drawable/gfd_app_logo"
1212
android:label="@string/app_name"
13+
android:networkSecurityConfig="@xml/network_security_config"
1314
android:supportsRtl="true"
1415
android:theme="@style/AppTheme"
15-
android:networkSecurityConfig="@xml/network_security_config"
1616
tools:ignore="GoogleAppIndexingWarning">
17+
<activity android:name=".views.GuestMain"></activity>
1718

1819
<meta-data
1920
android:name="com.google.android.gms.ads.APPLICATION_ID"
20-
android:value="@string/admob_app_id"/>
21+
android:value="@string/admob_app_id" />
2122

2223
<activity
23-
android:name="com.seok.gfd.views.LoginActivity"
24+
android:name=".views.LoginActivity"
2425
android:launchMode="singleTask">
2526
<intent-filter>
2627
<action android:name="android.intent.action.VIEW" />
@@ -31,14 +32,14 @@
3132
<data android:scheme="gfd" />
3233
</intent-filter>
3334
</activity>
34-
<activity android:name="com.seok.gfd.views.LauncherActivity">
35+
<activity android:name=".views.LauncherActivity">
3536
<intent-filter>
3637
<action android:name="android.intent.action.MAIN" />
3738

3839
<category android:name="android.intent.category.LAUNCHER" />
3940
</intent-filter>
4041
</activity>
41-
<activity android:name="com.seok.gfd.views.MainActivity" />
42+
<activity android:name=".views.MainActivity" />
4243
</application>
4344

4445
</manifest>
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
package com.seok.gfd.adapter
2+
3+
import android.annotation.SuppressLint
4+
import android.content.Context
5+
import android.graphics.Color
6+
import android.view.Gravity
7+
import android.view.LayoutInflater
8+
import android.view.View
9+
import android.view.ViewGroup
10+
import android.widget.LinearLayout
11+
import android.widget.TextView
12+
import androidx.gridlayout.widget.GridLayout
13+
import androidx.recyclerview.widget.RecyclerView
14+
import com.seok.gfd.R
15+
import com.seok.gfd.utils.Contribution
16+
import org.jetbrains.anko.backgroundColor
17+
import org.jetbrains.anko.margin
18+
import java.time.LocalDate
19+
import java.time.Month
20+
21+
class ContributionsAdapter(list: ArrayList<Contribution>, context: Context) :
22+
RecyclerView.Adapter<ContributionsAdapter.MyViewHolder>() {
23+
var list = list
24+
var context: Context = context
25+
26+
override fun getItemCount() = list.size
27+
28+
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
29+
val v = LayoutInflater.from(parent.context)
30+
.inflate(R.layout.contributions_layout, parent, false)
31+
return MyViewHolder(v)
32+
}
33+
34+
35+
@SuppressLint("SetTextI18n")
36+
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
37+
val contribution = list[position]
38+
val formatYear =
39+
String.format("%s: %d Contributions", contribution.year, contribution.total)
40+
holder.yearContribution.text = formatYear
41+
42+
var monthFlag = ""
43+
val size = contribution.list!!.size
44+
var lineLayout = LinearLayout(this.context)
45+
lineLayout.orientation = LinearLayout.VERTICAL
46+
val params = LinearLayout.LayoutParams(35, 35)
47+
params.margin = 4
48+
params.gravity = Gravity.CENTER
49+
for (index in 0 until size) {
50+
var tempLayout = LinearLayout(this.context)
51+
if (index % 7 == 0) {
52+
val monthDataStr = getDayStartCount(LocalDate.parse(contribution.list!![index].date).month)
53+
lineLayout = LinearLayout(this.context)
54+
lineLayout.orientation = LinearLayout.VERTICAL
55+
tempLayout.backgroundColor = Color.WHITE
56+
tempLayout.layoutParams = params
57+
if(monthFlag != monthDataStr){
58+
val month = TextView(this.context)
59+
month.textSize = 7f
60+
month.text = monthDataStr
61+
tempLayout.addView(month)
62+
monthFlag = monthDataStr
63+
}
64+
lineLayout.addView(tempLayout)
65+
tempLayout = LinearLayout(this.context)
66+
tempLayout.backgroundColor = Color.parseColor(contribution.list!![index].color)
67+
tempLayout.layoutParams = params
68+
lineLayout.addView(tempLayout)
69+
} else {
70+
tempLayout.backgroundColor = Color.parseColor(contribution.list!![index].color)
71+
tempLayout.layoutParams = params
72+
lineLayout.addView(tempLayout)
73+
}
74+
if (index % 7 == 0) {
75+
holder.contributionCanvas.addView(lineLayout)
76+
}
77+
if (index == size) {
78+
holder.contributionCanvas.addView(lineLayout)
79+
}
80+
}
81+
}
82+
83+
inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
84+
var yearContribution: TextView = itemView.findViewById(R.id.guest_year_contribution)
85+
var contributionCanvas: GridLayout = itemView.findViewById(R.id.canvas)
86+
}
87+
88+
private fun getDayStartCount(dayOfMonth: Month): String = when (dayOfMonth) {
89+
Month.JANUARY -> "Jan"
90+
Month.FEBRUARY -> "Feb"
91+
Month.MARCH -> "Mar"
92+
Month.APRIL -> "Apr"
93+
Month.MAY -> "May"
94+
Month.JUNE -> "Jun"
95+
Month.JULY -> "Jul"
96+
Month.AUGUST-> "Aug"
97+
Month.SEPTEMBER-> "Sep"
98+
Month.OCTOBER -> "Oct"
99+
Month.NOVEMBER-> "Nov"
100+
Month.DECEMBER -> "Dec"
101+
else -> "X"
102+
}
103+
}
104+
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.seok.gfd.adapter
2+
3+
import android.content.Context
4+
import android.view.LayoutInflater
5+
import android.view.View
6+
import android.view.ViewGroup
7+
import android.widget.ImageView
8+
import android.widget.TextView
9+
import android.widget.Toast
10+
import androidx.recyclerview.widget.RecyclerView
11+
import com.seok.gfd.R
12+
13+
class CustomAdapter(personNames : ArrayList<String>, personImages : ArrayList<Int>, context: Context) : RecyclerView.Adapter<CustomAdapter.MyViewHolder>() {
14+
var personNames =personNames
15+
var personImages : ArrayList<Int> = personImages
16+
var context: Context = context
17+
18+
override fun getItemCount() = personNames.size
19+
20+
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
21+
val v = LayoutInflater.from(parent.context).inflate(R.layout.rowlayout, parent, false)
22+
return MyViewHolder(v)
23+
}
24+
25+
26+
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
27+
holder.name.text = personNames[position]
28+
holder.image.setImageResource(personImages[position])
29+
holder.itemView.setOnClickListener {
30+
Toast.makeText(context, personNames[position], Toast.LENGTH_SHORT).show()
31+
}
32+
}
33+
34+
inner class MyViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){
35+
var name : TextView = itemView.findViewById(R.id.name)
36+
var image : ImageView = itemView.findViewById(R.id.image)
37+
}
38+
39+
}
40+

app/src/main/java/com/seok/gfd/retrofit/RetrofitClient.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import com.seok.gfd.BuildConfig
55
import com.seok.gfd.retrofit.service.UserService
66
import com.seok.gfd.retrofit.service.CommitService
77
import com.seok.gfd.retrofit.service.GithubApiService
8-
import com.seok.gfd.retrofit.service.GithubCommitService
8+
import com.seok.gfd.retrofit.service.GithubContributionService
99
import retrofit2.Retrofit
1010
import retrofit2.converter.gson.GsonConverterFactory
1111

@@ -43,13 +43,13 @@ class RetrofitClient {
4343
.build()
4444
return retrofit.create(CommitService::class.java)
4545
}
46-
fun githubCommitService(): GithubCommitService{
46+
fun githubContributionService(): GithubContributionService{
4747
val gson = GsonBuilder().setLenient().create()
4848
retrofit = Retrofit.Builder()
4949
.baseUrl("https://github-contributions-api.now.sh/v1/")
5050
.addConverterFactory(GsonConverterFactory.create(gson))
5151
.build()
52-
return retrofit.create(GithubCommitService::class.java)
52+
return retrofit.create(GithubContributionService::class.java)
5353
}
5454
}
5555
}

app/src/main/java/com/seok/gfd/retrofit/domain/resopnse/CommitsResponseDto.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,4 @@ class CommitsResponseDto {
4040
var color : String = ""
4141
var intensity : Int = 0
4242
}
43-
44-
4543
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.seok.gfd.retrofit.domain.resopnse
2+
3+
import lombok.AllArgsConstructor
4+
import lombok.Getter
5+
import lombok.NoArgsConstructor
6+
import lombok.Setter
7+
8+
@Getter
9+
@Setter
10+
@NoArgsConstructor
11+
@AllArgsConstructor
12+
class NestedContributionsResponseDto {
13+
14+
var years: HashMap<Int, Years>? = null
15+
16+
var contributions : Contributions? = null
17+
18+
inner class Years{
19+
var year: String? = null
20+
var total : Int? = 0
21+
var range: Range? = null
22+
23+
inner class Range{
24+
var start: String = ""
25+
var end: String = ""
26+
}
27+
}
28+
29+
inner class Contributions{
30+
var year: String? = null
31+
var total : Int? = 0
32+
var range: Range? = null
33+
var contributions : HashMap<Int, HashMap<Int, HashMap<Int, Contribution>>>? = null
34+
35+
inner class Range{
36+
var start: String = ""
37+
var end: String = ""
38+
}
39+
40+
inner class Contribution{
41+
var date : String = ""
42+
var count : Int = 0
43+
var color : String = ""
44+
var intensity : Int = 0
45+
}
46+
}
47+
}

app/src/main/java/com/seok/gfd/retrofit/service/GithubCommitService.kt

Lines changed: 0 additions & 11 deletions
This file was deleted.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.seok.gfd.retrofit.service
2+
3+
import com.seok.gfd.retrofit.domain.resopnse.CommitsResponseDto
4+
import com.seok.gfd.retrofit.domain.resopnse.NestedContributionsResponseDto
5+
import retrofit2.Call
6+
import retrofit2.http.GET
7+
import retrofit2.http.Path
8+
import retrofit2.http.Query
9+
10+
interface GithubContributionService {
11+
@GET("{userId}")
12+
fun getContributions(@Path("userId") userId: String): Call<CommitsResponseDto>
13+
14+
@GET("{userId}")
15+
fun getNestedContributions(
16+
@Path("userId") userId: String,
17+
@Query("format") format: String
18+
): Call<NestedContributionsResponseDto>
19+
}

0 commit comments

Comments
 (0)