Skip to content

Commit

Permalink
Merge pull request #7 from AmosKorir/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
AmosKorir authored Jul 1, 2020
2 parents d07cbc8 + 5fdd58f commit e665097
Show file tree
Hide file tree
Showing 22 changed files with 445 additions and 221 deletions.
9 changes: 9 additions & 0 deletions .idea/codeStyles/Project.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions .idea/codeStyles/codeStyleConfig.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 25 additions & 0 deletions .idea/jarRepositories.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 13 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
# AvatarImageGenerator

<img src="https://circleci.com/gh/skyways/AvatarImageGenerator.svg?style=svg"/> <a href="https://bintray.com/skyways/AvatarGenerator/AvatarGenerator/1.2/link"><img src="https://api.bintray.com/packages/skyways/AvatarGenerator/AvatarGenerator/images/download.svg?version=1.3"/></a>

Generate first letter avatar Image like gmails contact avatar. It generates an drawable that can be be set to an ImageView.
[![CircleCI](https://circleci.com/gh/circleci/circleci-docs.svg?style=shield)](https://app.circleci.com/pipelines/github/AmosKorir/AvatarImageGenerator/) [ ![Download](https://api.bintray.com/packages/skyways/AvatarGenerator/AvatarGenerator/images/download.svg?version=1.4) ](https://bintray.com/skyways/AvatarGenerator/AvatarGenerator/1.4/link)
Generate first letter avatar Image like gmail's contact avatar. It generates an drawable that can be be set to an ImageView.
<table>
<tr>
<td>
<img width="200" height="400" src="https://github.com/skyways/AvatarImageGenerator/blob/master/art/Screen2.png"/>
</td>
<td>

<img width="200" height="400" src="https://github.com/skyways/AvatarImageGenerator/blob/master/art/screen.jpeg"/>
</td>
</tr>
</table>


**Installation**

Expand Down Expand Up @@ -53,7 +62,7 @@ imageView.setImageDrawable(
```

**Color Model**
The current version supports material colors A 400,700 and 700.
The current version supports material colors A 400,700 and 900.

1. COLOR400
2. COLOR700
Expand Down
14 changes: 12 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ android {
applicationId "com.avatarfirst.avatagen"
minSdkVersion 15
targetSdkVersion 29
versionCode 2
versionName "1.2"
versionCode 4
versionName "1.4"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
Expand All @@ -21,6 +21,11 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}


Expand Down Expand Up @@ -57,11 +62,16 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
api 'com.squareup.retrofit2:converter-gson:2.7.1'
api 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.0'
implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
implementation project(':avatargenlib')
}
2 changes: 1 addition & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.avatarfirst.avatagen">

<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
Expand Down
69 changes: 38 additions & 31 deletions app/src/main/java/com/avatarfirst/avatagen/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,41 +1,48 @@
package com.avatarfirst.avatagen

import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.avatarfirst.avatargenlib.AvatarConstants
import com.avatarfirst.avatargenlib.AvatarGenerator
import com.bumptech.glide.Glide
import com.squareup.picasso.Picasso
import kotlinx.android.synthetic.main.activity_main.imageView
import kotlinx.android.synthetic.main.activity_main.imageView2
import kotlinx.android.synthetic.main.activity_main.imageView3
import androidx.recyclerview.widget.LinearLayoutManager
import com.avatarfirst.avatagen.apis.ApiData
import com.avatarfirst.avatagen.apis.GithubUserApiResponseItem
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
imageView.setImageDrawable(
AvatarGenerator.avatarImage(
this,
200,
AvatarConstants.RECTANGLE,
"Skyways"
)
)
//picaso
Picasso.get()
.load("https://brokenfortest")
.resize(50, 50)
.placeholder(AvatarGenerator.avatarImage(this, 200, AvatarConstants.CIRCLE, "Android",AvatarConstants.COLOR900))
.into(imageView2)
class MainActivity : AppCompatActivity() {
private val apiCall = ApiData()
private var compositeDisposable = CompositeDisposable()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
loadData()
}

//Glide
Glide.with(this)
.load("http://brokenfortest")
.placeholder(AvatarGenerator.avatarImage(this, 200, AvatarConstants.CIRCLE, "Kotjav"))
.into(imageView3)
private fun showUSer(users: List<GithubUserApiResponseItem>) {
usersRecyclerView.layoutManager = LinearLayoutManager(this)
usersRecyclerView.adapter = UsersAdapter(this, users)
}

}
private fun loadData() {
val disposable = apiCall.getUsersApi().getUsers()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
showUSer(it)
},
{
Toast.makeText(this, "error occurred", Toast.LENGTH_LONG).show()
}
)
compositeDisposable.add(disposable)
}

override fun onStop() {
super.onStop()
compositeDisposable.dispose()
}
}
44 changes: 44 additions & 0 deletions app/src/main/java/com/avatarfirst/avatagen/UsersAdapter.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.avatarfirst.avatagen

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.avatarfirst.avatagen.apis.GithubUserApiResponseItem
import com.avatarfirst.avatargenlib.AvatarConstants
import com.avatarfirst.avatargenlib.AvatarGenerator
import kotlinx.android.synthetic.main.user_layout.view.*

class UsersAdapter(
var context: Context,
var users: List<GithubUserApiResponseItem>
) : RecyclerView.Adapter<UsersAdapter.UserViewHolder>() {

class UserViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserViewHolder {
return UserViewHolder(
LayoutInflater.from(context).inflate(R.layout.user_layout, parent, false)
)
}

override fun getItemCount(): Int {
return users.size
}

override fun onBindViewHolder(holder: UserViewHolder, position: Int) {
holder.itemView.usename.text = users[position].login
holder.itemView.userAvatar.setImageDrawable(
AvatarGenerator.avatarImage(
context,
200,
AvatarConstants.CIRCLE,
users[position].login
)
)
}

}
41 changes: 41 additions & 0 deletions app/src/main/java/com/avatarfirst/avatagen/apis/ApiData.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.avatarfirst.avatagen.apis

import com.google.gson.FieldNamingPolicy
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

class ApiData {
private fun provideUseApi(retrofit: Retrofit): GithubApi {
return retrofit.create(GithubApi::class.java)
}



private fun provideGson(): Gson {
return GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.IDENTITY).create()
}

private fun provideHttpClient(): OkHttpClient {
val okHttpClientBuilder = OkHttpClient.Builder()

return okHttpClientBuilder.build()
}

private fun provideRetrofit(factory: Gson, client: OkHttpClient): Retrofit {
return Retrofit.Builder()
.baseUrl("https://api.github.com/")
.addConverterFactory(GsonConverterFactory.create(factory))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build()
}

fun getUsersApi(): GithubApi {
val retrofit=provideRetrofit(provideGson(),provideHttpClient())
return provideUseApi(retrofit)
}
}
9 changes: 9 additions & 0 deletions app/src/main/java/com/avatarfirst/avatagen/apis/GithubAPi.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.avatarfirst.avatagen.apis

import io.reactivex.Single
import retrofit2.http.GET

interface GithubApi {
@GET("users/amoskorir/followers")
fun getUsers(): Single<List<GithubUserApiResponseItem>>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.avatarfirst.avatagen.apis

data class GithubUserApiResponseItem(
val avatar_url: String,
val events_url: String,
val followers_url: String,
val following_url: String,
val gists_url: String,
val gravatar_id: String,
val html_url: String,
val id: Int,
val login: String,
val node_id: String,
val organizations_url: String,
val received_events_url: String,
val repos_url: String,
val site_admin: Boolean,
val starred_url: String,
val subscriptions_url: String,
val type: String,
val url: String
)
44 changes: 12 additions & 32 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,36 +4,16 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
>
<ImageView
android:id="@+id/imageView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView"
app:srcCompat="@mipmap/ic_launcher_round"
/>
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/imageView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@mipmap/ic_launcher_round"
/>
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/imageView3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView2"
app:srcCompat="@mipmap/ic_launcher_round"
/>
android:background="@android:color/background_dark"
tools:context=".MainActivity">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/usersRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:listitem="@layout/user_layout" />
</androidx.constraintlayout.widget.ConstraintLayout>
Loading

0 comments on commit e665097

Please sign in to comment.