Merge branch 'master' into oath

This commit is contained in:
Wv5twkFEKh54vo4tta9yu7dHa3 2020-03-07 19:02:45 +01:00 committed by GitHub
commit f0d5f918e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 274 additions and 18 deletions

View File

@ -59,7 +59,11 @@ dependencies {
implementation 'com.google.android.material:material:1.1.0'
implementation ("com.github.bumptech.glide:glide:4.11.0") {
exclude group: "com.android.support"
}
testImplementation "com.github.tomakehurst:wiremock-jre8:2.26.3"
testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0"
testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
@ -92,4 +96,4 @@ task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'crea
'jacoco/testDebugUnitTest.exec'
]))
}
}

View File

@ -0,0 +1,34 @@
package com.h.pixeldroid
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.*
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.hamcrest.Matchers.not
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import java.lang.Thread.sleep
@RunWith(AndroidJUnit4::class)
class ProfileTest {
@get:Rule
var activityRule: ActivityScenarioRule<MainActivity>
= ActivityScenarioRule(MainActivity::class.java)
@Test
fun testFollowersTextView() {
onView(withId(R.id.button)).perform(click())
onView(withId(R.id.followers)).check(matches(withText("Followers")))
}
@Test
fun testAccountNameTextView() {
onView(withId(R.id.button)).perform(click())
sleep((1000 * 5))
onView(withId(R.id.accountName)).check(matches(not(withText("No Username"))))
}
}

View File

@ -21,7 +21,9 @@
android:host="${applicationId}"
android:scheme="@string/auth_scheme" />
</intent-filter>
</activity> <activity android:name=".MainActivity">
</activity>
<activity android:name=".ProfileActivity"></activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

View File

@ -1,20 +1,24 @@
package com.h.pixeldroid
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val button = findViewById<Button>(R.id.button_start_login)
button.setOnClickListener((View.OnClickListener {
val button_login = findViewById<Button>(R.id.button_start_login)
button_login.setOnClickListener((View.OnClickListener {
val intent = Intent(this, LoginActivity::class.java)
startActivity(intent) }))
}
val button = findViewById<Button>(R.id.button)
button.setOnClickListener((View.OnClickListener {
val intent = Intent(this, ProfileActivity::class.java)
startActivity(intent) }))
}
}

View File

@ -0,0 +1,80 @@
package com.h.pixeldroid
import android.graphics.Typeface
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.ImageView
import android.widget.TextView
import com.bumptech.glide.Glide
import com.h.pixeldroid.api.PixelfedAPI
import com.h.pixeldroid.objects.Account
import com.h.pixeldroid.objects.Status
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
class ProfileActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_profile)
var statuses: ArrayList<Status>? = null
val BASE_URL = "https://pixelfed.de/"
val pixelfedAPI = PixelfedAPI.create(BASE_URL)
pixelfedAPI.timelinePublic(null, null, null, null, null)
.enqueue(object : Callback<List<Status>> {
override fun onResponse(call: Call<List<Status>>, response: Response<List<Status>>) {
if (response.code() == 200) {
statuses = response.body() as ArrayList<Status>?
if(!statuses.isNullOrEmpty()) {
val account = statuses!![0].account
setContent(account)
}
}
}
override fun onFailure(call: Call<List<Status>>, t: Throwable) {
Log.e("Ouch, not OK", t.toString())
}
})
}
private fun setContent(account: Account) {
// ImageView : profile picture
val profilePicture = findViewById<ImageView>(R.id.profilePicture)
Glide.with(applicationContext).load(account.avatar).into(profilePicture)
// TextView : description / bio
val description = findViewById<TextView>(R.id.description)
description.text = account.note
// TextView : account name
val accountName = findViewById<TextView>(R.id.accountName)
accountName.text = account.username
// TextView : number of posts
val nbPosts = findViewById<TextView>(R.id.nbPosts)
nbPosts.text = account.statuses_count.toString()
nbPosts.setTypeface(null, Typeface.BOLD)
// TextView : number of followers
val nbFollowers = findViewById<TextView>(R.id.nbFollowers)
nbFollowers.text = account.followers_count.toString()
nbFollowers.setTypeface(null, Typeface.BOLD)
// TextView : number of following
val nbFollowing = findViewById<TextView>(R.id.nbFollowing)
nbFollowing.text = account.following_count.toString()
nbFollowing.setTypeface(null, Typeface.BOLD)
}
}

View File

@ -6,15 +6,19 @@
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Show a profile" />
</LinearLayout>
<Button
android:id="@+id/button_start_login"
@ -22,7 +26,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
android:text="start login"
app:layout_constraintStart_toStartOf="@+id/textView"
app:layout_constraintTop_toBottomOf="@+id/textView" />
app:layout_constraintStart_toStartOf="@+id/button"
app:layout_constraintTop_toBottomOf="@+id/button" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ProfileActivity">
<ImageView
android:id="@+id/profilePicture"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginStart="16dp"
android:layout_marginTop="24dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:srcCompat="@tools:sample/avatars" />
<TextView
android:id="@+id/nbFollowing"
android:layout_width="38dp"
android:layout_height="26dp"
android:layout_marginTop="52dp"
android:layout_marginEnd="36dp"
android:text="N/A"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/posts"
android:layout_width="40dp"
android:layout_height="20dp"
android:layout_marginTop="8dp"
android:text="Posts"
app:layout_constraintEnd_toEndOf="@+id/nbPosts"
app:layout_constraintStart_toStartOf="@+id/nbPosts"
app:layout_constraintTop_toBottomOf="@+id/nbPosts" />
<TextView
android:id="@+id/nbPosts"
android:layout_width="39dp"
android:layout_height="27dp"
android:layout_marginStart="152dp"
android:layout_marginTop="52dp"
android:text="N/A"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/followers"
android:layout_width="65dp"
android:layout_height="20dp"
android:layout_marginTop="8dp"
android:text="Followers"
app:layout_constraintEnd_toEndOf="@+id/nbFollowers"
app:layout_constraintStart_toStartOf="@+id/nbFollowers"
app:layout_constraintTop_toBottomOf="@+id/nbFollowers" />
<TextView
android:id="@+id/following"
android:layout_width="65dp"
android:layout_height="20dp"
android:layout_marginTop="8dp"
android:text="Following"
app:layout_constraintEnd_toEndOf="@+id/nbFollowing"
app:layout_constraintStart_toStartOf="@+id/nbFollowing"
app:layout_constraintTop_toBottomOf="@+id/nbFollowing" />
<TextView
android:id="@+id/nbFollowers"
android:layout_width="39dp"
android:layout_height="27dp"
android:layout_marginTop="52dp"
android:text="N/A"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.669"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/accountName"
android:layout_width="156dp"
android:layout_height="22dp"
android:layout_marginTop="15dp"
android:text="No Username"
app:layout_constraintStart_toStartOf="@+id/profilePicture"
app:layout_constraintTop_toBottomOf="@+id/profilePicture" />
<TextView
android:id="@+id/description"
android:layout_width="348dp"
android:layout_height="85dp"
android:layout_marginTop="14dp"
app:layout_constraintStart_toStartOf="@+id/accountName"
app:layout_constraintTop_toBottomOf="@+id/accountName" />
<Button
android:id="@+id/followButton"
android:layout_width="150dp"
android:layout_height="38dp"
android:layout_marginTop="14dp"
android:text="Follow"
app:layout_constraintStart_toStartOf="@+id/description"
app:layout_constraintTop_toBottomOf="@+id/description" />
<ImageButton
android:id="@+id/postsButton"
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_marginStart="152dp"
android:layout_marginTop="20dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/followButton"
app:srcCompat="@android:drawable/ic_dialog_dialer" />
<ImageButton
android:id="@+id/collectionButton"
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_marginStart="4dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/postsButton"
app:layout_constraintTop_toTopOf="@+id/postsButton"
app:srcCompat="@android:drawable/ic_menu_gallery" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -8,7 +8,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.0'
classpath 'com.android.tools.build:gradle:3.6.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong