Skip to content

Instantly share code, notes, and snippets.

View tirgei's full-sized avatar
🤘
Carpe Diem

Vincent Kiptirgei tirgei

🤘
Carpe Diem
View GitHub Profile
@tirgei
tirgei / retrofit build.gradle
Last active February 15, 2020 10:26
App gradle for Retrofit Authorization app
dependencies {
...
// Network
implementation 'com.squareup.retrofit2:retrofit:2.7.1'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'com.squareup.okhttp3:okhttp:4.2.1'
...
}
@tirgei
tirgei / retrofit Constants.kt
Last active February 15, 2020 11:15
Initial constants for Retrofit Authorization
object Constants {
// Endpoints
const val BASE_URL = "https://baseurl.com/"
const val LOGIN_URL = "auth/login"
const val POSTS_URL = "posts"
}
@tirgei
tirgei / retrofit ApiService.kt
Last active February 15, 2020 11:18
Api Service for Retrofit Authorization
/**
* Interface for defining REST request functions
*/
interface ApiService {
@POST(Constants.LOGIN_URL)
@FormUrlEncoded
fun login(@Body request: LoginRequest): Call<LoginResponse>
}
/**
* Retrofit instance class
*/
class ApiClient {
private lateinit var apiService: ApiService
fun getApiService(): ApiService {
// Initialize ApiService if not initialized yet
if (!::apiService.isInitialized) {
data class User (
@SerializedName("id")
var id: String,
@SerializedName("first_name")
var firstName: String,
@SerializedName("last_name")
var lastName: String,
data class LoginRequest (
@SerializedName("email")
var email: String,
@SerializedName("password")
var password: String
)
data class LoginResponse (
@SerializedName("status_code")
var statusCode: Int,
@SerializedName("auth_token")
var authToken: String,
@SerializedName("user")
var user: User
)
/**
* Session manager to save and fetch data from SharedPreferences
*/
class SessionManager (context: Context) {
private var prefs: SharedPreferences = context.getSharedPreferences(context.getString(R.string.app_name), Context.MODE_PRIVATE)
companion object {
const val USER_TOKEN = "user_token"
}
class LoginActivity : AppCompatActivity() {
private lateinit var sessionManager: SessionManager
private lateinit var apiClient: ApiClient
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
apiClient = ApiClient()
sessionManager = SessionManager(this)
data class Post (
@SerializedName("id")
var id: Int,
@SerializedName("title")
var title: String,
@SerializedName("description")
var description: String,