2020-02-28 17:08:54 +01:00
|
|
|
package com.h.pixeldroid
|
|
|
|
|
2020-03-13 11:48:45 +01:00
|
|
|
import android.content.Context
|
2020-03-06 08:49:26 +01:00
|
|
|
import android.content.Intent
|
2020-05-19 09:49:34 +02:00
|
|
|
import android.graphics.drawable.Drawable
|
|
|
|
import android.net.Uri
|
2020-02-28 17:08:54 +01:00
|
|
|
import android.os.Bundle
|
2020-05-01 11:26:18 +02:00
|
|
|
import android.util.Log
|
|
|
|
import android.view.View
|
2020-05-19 09:49:34 +02:00
|
|
|
import android.widget.ImageView
|
2020-03-08 12:54:18 +01:00
|
|
|
import androidx.appcompat.app.AppCompatActivity
|
2020-11-27 17:02:52 +01:00
|
|
|
import androidx.core.content.ContextCompat
|
2020-03-05 21:07:10 +01:00
|
|
|
import androidx.core.view.GravityCompat
|
2020-03-12 22:23:25 +01:00
|
|
|
import androidx.fragment.app.Fragment
|
2020-12-29 19:34:48 +01:00
|
|
|
import androidx.lifecycle.lifecycleScope
|
2020-11-27 17:02:52 +01:00
|
|
|
import androidx.paging.ExperimentalPagingApi
|
2020-03-13 11:48:45 +01:00
|
|
|
import androidx.viewpager2.adapter.FragmentStateAdapter
|
2020-05-19 09:49:34 +02:00
|
|
|
import com.bumptech.glide.Glide
|
2020-03-13 11:48:45 +01:00
|
|
|
import com.google.android.material.tabs.TabLayoutMediator
|
2021-01-13 01:28:08 +01:00
|
|
|
import com.h.pixeldroid.databinding.ActivityMainBinding
|
2020-12-26 12:10:54 +01:00
|
|
|
import com.h.pixeldroid.postCreation.camera.CameraFragment
|
|
|
|
import com.h.pixeldroid.posts.feeds.cachedFeeds.notifications.NotificationsFragment
|
|
|
|
import com.h.pixeldroid.posts.feeds.cachedFeeds.postFeeds.PostFeedFragment
|
|
|
|
import com.h.pixeldroid.profile.ProfileActivity
|
|
|
|
import com.h.pixeldroid.searchDiscover.SearchDiscoverFragment
|
|
|
|
import com.h.pixeldroid.settings.SettingsActivity
|
|
|
|
import com.h.pixeldroid.utils.BaseActivity
|
2021-01-13 01:28:08 +01:00
|
|
|
import com.h.pixeldroid.utils.db.addUser
|
|
|
|
import com.h.pixeldroid.utils.db.entities.HomeStatusDatabaseEntity
|
|
|
|
import com.h.pixeldroid.utils.db.entities.PublicFeedStatusDatabaseEntity
|
|
|
|
import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
|
2020-12-26 12:10:54 +01:00
|
|
|
import com.h.pixeldroid.utils.hasInternet
|
2020-05-19 09:49:34 +02:00
|
|
|
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
|
|
|
|
import com.mikepenz.materialdrawer.iconics.iconicsIcon
|
|
|
|
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem
|
|
|
|
import com.mikepenz.materialdrawer.model.ProfileDrawerItem
|
|
|
|
import com.mikepenz.materialdrawer.model.ProfileSettingDrawerItem
|
|
|
|
import com.mikepenz.materialdrawer.model.interfaces.*
|
|
|
|
import com.mikepenz.materialdrawer.util.AbstractDrawerImageLoader
|
|
|
|
import com.mikepenz.materialdrawer.util.DrawerImageLoader
|
|
|
|
import com.mikepenz.materialdrawer.widget.AccountHeaderView
|
2021-03-19 10:34:43 +01:00
|
|
|
import org.ligi.tracedroid.sending.sendTraceDroidStackTracesIfExist
|
2020-12-29 19:34:48 +01:00
|
|
|
import retrofit2.HttpException
|
|
|
|
import java.io.IOException
|
2020-03-13 12:17:17 +01:00
|
|
|
|
2020-12-11 16:53:12 +01:00
|
|
|
class MainActivity : BaseActivity() {
|
2020-03-05 21:07:10 +01:00
|
|
|
|
2020-05-19 09:49:34 +02:00
|
|
|
private lateinit var header: AccountHeaderView
|
|
|
|
private var user: UserDatabaseEntity? = null
|
|
|
|
|
|
|
|
companion object {
|
|
|
|
const val ADD_ACCOUNT_IDENTIFIER: Long = -13
|
|
|
|
}
|
2020-03-13 11:48:45 +01:00
|
|
|
|
2021-01-13 01:28:08 +01:00
|
|
|
private lateinit var binding: ActivityMainBinding
|
|
|
|
|
2020-11-27 17:02:52 +01:00
|
|
|
@ExperimentalPagingApi
|
2020-02-28 17:08:54 +01:00
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
2020-04-23 19:49:30 +02:00
|
|
|
setTheme(R.style.AppTheme_NoActionBar)
|
2020-02-28 17:08:54 +01:00
|
|
|
super.onCreate(savedInstanceState)
|
2021-01-13 01:28:08 +01:00
|
|
|
binding = ActivityMainBinding.inflate(layoutInflater)
|
|
|
|
setContentView(binding.root)
|
2020-03-05 21:07:10 +01:00
|
|
|
|
2020-05-19 09:49:34 +02:00
|
|
|
//get the currently active user
|
|
|
|
user = db.userDao().getActiveUser()
|
|
|
|
|
2020-03-13 11:48:45 +01:00
|
|
|
//Check if we have logged in and gotten an access token
|
2020-05-19 09:49:34 +02:00
|
|
|
if (user == null) {
|
|
|
|
launchActivity(LoginActivity(), firstTime = true)
|
2021-02-05 14:48:12 +01:00
|
|
|
finish()
|
As a user I want to be able to see posts in a feed (#28)
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* WIP posts
* trying to add images
* WIP posts
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* rebased from master
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* WIP posts
* trying to add images
* WIP posts
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* rebased from master
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* fixed merging errors
* fixed another merge problem
* trying my best to merge
* removed drawable definition in activity_post.xml
* implements swipe motion
add a new class to implement swipe motion
add the swipe right from home page to display settings
passed the homepage in a fragment
* transform profile activity into fragment
transformed profile activity and layout into fragment
linked it with a swipe motion
* Implement swipeable tabs
* Ask for login on first start, add API endpoints, change profile to show the user's profile
* Started converting Post to a fragment
* got a working feed
* WI
* removed non-valid test
* WIP posts
* trying to add images
* WIP posts
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* layout changes
* refactoring
* refactoring
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* fixed merging errors
* trying my best to merge
* removed drawable definition in activity_post.xml
* Started converting Post to a fragment
* got a working feed
* WI
* removed non-valid test
* rebase on other branch
* moved the feed to the home page
* Add tests
* delete test for now
* Adapt test to changes (no more profile from drawer)
* Add unit test for api
* Add test for profile, refactor to allow testing, add exception to security policy to allow tests
* Adapt test to new situation
* Fix typo due to change
* refactor somewhat
* added a feed test
* WIP posts
* trying to add images
* WIP posts
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* WIP posts
* trying to add images
* WIP posts
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* fixed merging errors
* trying my best to merge
* removed drawable definition in activity_post.xml
* Started converting Post to a fragment
* got a working feed
* WI
* removed non-valid test
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* refactoring
* refactoring
* removed wrong annotation in unit test
* WIP posts
* WIP posts
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* layout changes
* moved a test file
* refactoring
* refactoring
* refactoring
* refactoring
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* fixed merging errors
* trying my best to merge
* removed drawable definition in activity_post.xml
* Started converting Post to a fragment
* got a working feed
* WI
* removed non-valid test
* rebase on other branch
* moved the feed to the home page
* added a feed test
* added a working feed test
* fixed broken test
* merged with master
* added a max height for images and made profile pictures round
* Added a default image for the post
* created a PostActivity to look a single posts
* fixed buggy postActivity
* Complete overhall of the feed UI
* removed test that didn't please Travis
* removed legacy test
* changed feedAdapter init location (outside of network callback)
Co-authored-by: Matthieu <61561059+Wv5twkFEKh54vo4tta9yu7dHa3@users.noreply.github.com>
Co-authored-by: Ulysse Widmer <ulysse.widmer@epfl.ch>
2020-03-16 09:38:35 +01:00
|
|
|
} else {
|
2021-03-19 10:34:43 +01:00
|
|
|
sendTraceDroidStackTracesIfExist("contact@pixeldroid.org", this)
|
|
|
|
|
2020-05-01 11:26:18 +02:00
|
|
|
setupDrawer()
|
2020-11-27 17:02:52 +01:00
|
|
|
|
2020-12-19 13:22:45 +01:00
|
|
|
val tabs: List<() -> Fragment> = listOf(
|
|
|
|
{
|
|
|
|
PostFeedFragment<HomeStatusDatabaseEntity>()
|
|
|
|
.apply {
|
|
|
|
arguments = Bundle().apply { putBoolean("home", true) }
|
|
|
|
}
|
2020-11-27 17:02:52 +01:00
|
|
|
},
|
2020-12-19 13:22:45 +01:00
|
|
|
{ SearchDiscoverFragment() },
|
|
|
|
{ CameraFragment() },
|
|
|
|
{ NotificationsFragment() },
|
|
|
|
{
|
|
|
|
PostFeedFragment<PublicFeedStatusDatabaseEntity>()
|
|
|
|
.apply {
|
|
|
|
arguments = Bundle().apply { putBoolean("home", false) }
|
|
|
|
}
|
2020-11-27 17:02:52 +01:00
|
|
|
}
|
2020-04-10 12:55:02 +02:00
|
|
|
)
|
As a user I want to be able to see posts in a feed (#28)
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* WIP posts
* trying to add images
* WIP posts
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* rebased from master
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* WIP posts
* trying to add images
* WIP posts
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* rebased from master
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* fixed merging errors
* fixed another merge problem
* trying my best to merge
* removed drawable definition in activity_post.xml
* implements swipe motion
add a new class to implement swipe motion
add the swipe right from home page to display settings
passed the homepage in a fragment
* transform profile activity into fragment
transformed profile activity and layout into fragment
linked it with a swipe motion
* Implement swipeable tabs
* Ask for login on first start, add API endpoints, change profile to show the user's profile
* Started converting Post to a fragment
* got a working feed
* WI
* removed non-valid test
* WIP posts
* trying to add images
* WIP posts
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* layout changes
* refactoring
* refactoring
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* fixed merging errors
* trying my best to merge
* removed drawable definition in activity_post.xml
* Started converting Post to a fragment
* got a working feed
* WI
* removed non-valid test
* rebase on other branch
* moved the feed to the home page
* Add tests
* delete test for now
* Adapt test to changes (no more profile from drawer)
* Add unit test for api
* Add test for profile, refactor to allow testing, add exception to security policy to allow tests
* Adapt test to new situation
* Fix typo due to change
* refactor somewhat
* added a feed test
* WIP posts
* trying to add images
* WIP posts
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* WIP posts
* trying to add images
* WIP posts
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* fixed merging errors
* trying my best to merge
* removed drawable definition in activity_post.xml
* Started converting Post to a fragment
* got a working feed
* WI
* removed non-valid test
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* refactoring
* refactoring
* removed wrong annotation in unit test
* WIP posts
* WIP posts
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* layout changes
* moved a test file
* refactoring
* refactoring
* refactoring
* refactoring
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* fixed merging errors
* trying my best to merge
* removed drawable definition in activity_post.xml
* Started converting Post to a fragment
* got a working feed
* WI
* removed non-valid test
* rebase on other branch
* moved the feed to the home page
* added a feed test
* added a working feed test
* fixed broken test
* merged with master
* added a max height for images and made profile pictures round
* Added a default image for the post
* created a PostActivity to look a single posts
* fixed buggy postActivity
* Complete overhall of the feed UI
* removed test that didn't please Travis
* removed legacy test
* changed feedAdapter init location (outside of network callback)
Co-authored-by: Matthieu <61561059+Wv5twkFEKh54vo4tta9yu7dHa3@users.noreply.github.com>
Co-authored-by: Ulysse Widmer <ulysse.widmer@epfl.ch>
2020-03-16 09:38:35 +01:00
|
|
|
setupTabs(tabs)
|
|
|
|
}
|
2020-05-01 11:26:18 +02:00
|
|
|
}
|
2020-04-30 20:01:35 +02:00
|
|
|
|
2020-05-01 11:26:18 +02:00
|
|
|
private fun setupDrawer() {
|
2021-01-13 01:28:08 +01:00
|
|
|
binding.mainDrawerButton.setOnClickListener{
|
|
|
|
binding.drawerLayout.open()
|
2020-09-13 23:35:09 +02:00
|
|
|
}
|
|
|
|
|
2020-05-19 09:49:34 +02:00
|
|
|
header = AccountHeaderView(this).apply {
|
|
|
|
headerBackgroundScaleType = ImageView.ScaleType.CENTER_CROP
|
|
|
|
currentHiddenInList = true
|
|
|
|
onAccountHeaderListener = { _: View?, profile: IProfile, current: Boolean ->
|
|
|
|
clickProfile(profile, current)
|
|
|
|
}
|
|
|
|
addProfile(ProfileSettingDrawerItem().apply {
|
|
|
|
identifier = ADD_ACCOUNT_IDENTIFIER
|
|
|
|
nameRes = R.string.add_account_name
|
|
|
|
descriptionRes = R.string.add_account_description
|
|
|
|
iconicsIcon = GoogleMaterial.Icon.gmd_add
|
|
|
|
}, 0)
|
2021-01-13 01:28:08 +01:00
|
|
|
attachToSliderView(binding.drawer)
|
2020-05-19 09:49:34 +02:00
|
|
|
dividerBelowHeader = false
|
|
|
|
closeDrawerOnProfileListClick = true
|
|
|
|
}
|
|
|
|
|
|
|
|
DrawerImageLoader.init(object : AbstractDrawerImageLoader() {
|
|
|
|
override fun set(imageView: ImageView, uri: Uri, placeholder: Drawable, tag: String?) {
|
|
|
|
Glide.with(imageView.context)
|
|
|
|
.load(uri)
|
|
|
|
.placeholder(placeholder)
|
|
|
|
.into(imageView)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun cancel(imageView: ImageView) {
|
|
|
|
Glide.with(imageView.context).clear(imageView)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun placeholder(ctx: Context, tag: String?): Drawable {
|
|
|
|
if (tag == DrawerImageLoader.Tags.PROFILE.name || tag == DrawerImageLoader.Tags.PROFILE_DRAWER_ITEM.name) {
|
2020-11-27 17:02:52 +01:00
|
|
|
return ContextCompat.getDrawable(ctx, R.drawable.ic_default_user)!!
|
2020-05-19 09:49:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return super.placeholder(ctx, tag)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
fillDrawerAccountInfo(user!!.user_id)
|
|
|
|
|
|
|
|
//after setting with the values in the db, we make sure to update the database and apply
|
|
|
|
//with the received one. This happens asynchronously.
|
|
|
|
getUpdatedAccount()
|
|
|
|
|
2021-01-13 01:28:08 +01:00
|
|
|
binding.drawer.itemAdapter.add(
|
2020-05-19 09:49:34 +02:00
|
|
|
primaryDrawerItem {
|
|
|
|
nameRes = R.string.menu_account
|
|
|
|
iconicsIcon = GoogleMaterial.Icon.gmd_person
|
|
|
|
},
|
|
|
|
primaryDrawerItem {
|
|
|
|
nameRes = R.string.menu_settings
|
|
|
|
iconicsIcon = GoogleMaterial.Icon.gmd_settings
|
|
|
|
},
|
|
|
|
primaryDrawerItem {
|
|
|
|
nameRes = R.string.logout
|
|
|
|
iconicsIcon = GoogleMaterial.Icon.gmd_close
|
|
|
|
})
|
2021-01-13 01:28:08 +01:00
|
|
|
binding.drawer.onDrawerItemClickListener = { v, drawerItem, position ->
|
2020-05-19 09:49:34 +02:00
|
|
|
when (position){
|
|
|
|
1 -> launchActivity(ProfileActivity())
|
|
|
|
2 -> launchActivity(SettingsActivity())
|
|
|
|
3 -> logOut()
|
|
|
|
}
|
|
|
|
false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun logOut(){
|
2021-01-05 00:38:16 +01:00
|
|
|
db.runInTransaction {
|
|
|
|
db.userDao().deleteActiveUsers()
|
|
|
|
|
|
|
|
val remainingUsers = db.userDao().getAll()
|
|
|
|
if (remainingUsers.isEmpty()){
|
|
|
|
//no more users, start first-time login flow
|
|
|
|
launchActivity(LoginActivity(), firstTime = true)
|
|
|
|
} else {
|
|
|
|
val newActive = remainingUsers.first()
|
|
|
|
db.userDao().activateUser(newActive.user_id)
|
|
|
|
apiHolder.setDomainToCurrentUser(db)
|
|
|
|
//relaunch the app
|
|
|
|
launchActivity(MainActivity(), firstTime = true)
|
|
|
|
}
|
2020-05-19 09:49:34 +02:00
|
|
|
}
|
|
|
|
}
|
2020-07-26 20:56:01 +02:00
|
|
|
private fun getUpdatedAccount() {
|
2020-05-14 20:14:41 +02:00
|
|
|
if (hasInternet(applicationContext)) {
|
2020-05-19 09:49:34 +02:00
|
|
|
val domain = user?.instance_uri.orEmpty()
|
|
|
|
val accessToken = user?.accessToken.orEmpty()
|
2020-11-29 14:58:54 +01:00
|
|
|
val refreshToken = user?.refreshToken
|
2020-11-29 20:19:25 +01:00
|
|
|
val clientId = user?.clientId.orEmpty()
|
|
|
|
val clientSecret = user?.clientSecret.orEmpty()
|
2020-07-26 20:56:01 +02:00
|
|
|
val api = apiHolder.api ?: apiHolder.setDomainToCurrentUser(db)
|
2020-05-01 11:26:18 +02:00
|
|
|
|
2020-12-29 19:34:48 +01:00
|
|
|
lifecycleScope.launchWhenCreated {
|
|
|
|
try {
|
|
|
|
val account = api.verifyCredentials("Bearer $accessToken")
|
|
|
|
addUser(db, account, domain, accessToken = accessToken, refreshToken = refreshToken, clientId = clientId, clientSecret = clientSecret)
|
|
|
|
fillDrawerAccountInfo(account.id!!)
|
|
|
|
} catch (exception: IOException) {
|
|
|
|
Log.e("ACCOUNT UPDATE:", exception.toString())
|
|
|
|
} catch (exception: HttpException) {
|
|
|
|
Log.e("ACCOUNT UPDATE:", exception.toString())
|
|
|
|
}
|
|
|
|
}
|
2020-05-14 20:14:41 +02:00
|
|
|
}
|
2020-03-12 22:23:25 +01:00
|
|
|
}
|
2020-03-04 18:04:55 +01:00
|
|
|
|
2020-05-19 09:49:34 +02:00
|
|
|
//called when switching profiles, or when clicking on current profile
|
|
|
|
private fun clickProfile(profile: IProfile, current: Boolean): Boolean {
|
|
|
|
if(current){
|
|
|
|
launchActivity(ProfileActivity())
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
//Clicked on add new account
|
|
|
|
if(profile.identifier == ADD_ACCOUNT_IDENTIFIER){
|
|
|
|
launchActivity(LoginActivity())
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
2020-07-26 20:56:01 +02:00
|
|
|
db.userDao().deActivateActiveUsers()
|
2020-05-19 09:49:34 +02:00
|
|
|
db.userDao().activateUser(profile.identifier.toString())
|
2020-07-26 20:56:01 +02:00
|
|
|
apiHolder.setDomainToCurrentUser(db)
|
2020-05-19 09:49:34 +02:00
|
|
|
val intent = Intent(this, MainActivity::class.java)
|
|
|
|
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
|
|
|
startActivity(intent)
|
|
|
|
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
private inline fun primaryDrawerItem(block: PrimaryDrawerItem.() -> Unit): PrimaryDrawerItem {
|
|
|
|
return PrimaryDrawerItem()
|
|
|
|
.apply {
|
|
|
|
isSelectable = false
|
|
|
|
isIconTinted = true
|
|
|
|
}
|
|
|
|
.apply(block)
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun fillDrawerAccountInfo(account: String) {
|
|
|
|
val users = db.userDao().getAll().toMutableList()
|
2020-12-19 13:22:45 +01:00
|
|
|
users.sortWith { l, r ->
|
2020-05-19 09:49:34 +02:00
|
|
|
when {
|
|
|
|
l.isActive && !r.isActive -> -1
|
|
|
|
r.isActive && !l.isActive -> 1
|
|
|
|
else -> 0
|
|
|
|
}
|
2020-12-19 13:22:45 +01:00
|
|
|
}
|
2020-05-19 09:49:34 +02:00
|
|
|
val profiles: MutableList<IProfile> = users.map { user ->
|
|
|
|
ProfileDrawerItem().apply {
|
|
|
|
isSelected = user.isActive
|
|
|
|
nameText = user.display_name
|
|
|
|
iconUrl = user.avatar_static
|
|
|
|
isNameShown = true
|
|
|
|
identifier = user.user_id.toLong()
|
2020-11-01 18:44:32 +01:00
|
|
|
descriptionText = "@${user.username}@${user.instance_uri.removePrefix("https://")}"
|
2020-05-19 09:49:34 +02:00
|
|
|
}
|
|
|
|
}.toMutableList()
|
|
|
|
|
|
|
|
// reuse the already existing "add account" item
|
2020-11-01 18:44:32 +01:00
|
|
|
header.profiles.orEmpty()
|
|
|
|
.filter { it.identifier == ADD_ACCOUNT_IDENTIFIER }
|
|
|
|
.take(1)
|
2020-11-06 14:49:49 +01:00
|
|
|
.forEach { profiles.add(it) }
|
2020-11-01 18:44:32 +01:00
|
|
|
|
2020-05-19 09:49:34 +02:00
|
|
|
header.clear()
|
|
|
|
header.profiles = profiles
|
|
|
|
header.setActiveProfile(account.toLong())
|
2020-05-14 20:14:41 +02:00
|
|
|
}
|
2020-05-01 11:26:18 +02:00
|
|
|
|
2020-05-19 09:49:34 +02:00
|
|
|
|
2020-12-19 13:22:45 +01:00
|
|
|
private fun setupTabs(tab_array: List<() -> Fragment>){
|
2021-01-13 01:28:08 +01:00
|
|
|
binding.viewPager.adapter = object : FragmentStateAdapter(this) {
|
2020-03-13 11:48:45 +01:00
|
|
|
override fun createFragment(position: Int): Fragment {
|
2020-12-19 13:22:45 +01:00
|
|
|
return tab_array[position]()
|
2020-03-13 11:48:45 +01:00
|
|
|
}
|
2020-03-12 22:23:25 +01:00
|
|
|
|
2020-03-13 11:48:45 +01:00
|
|
|
override fun getItemCount(): Int {
|
2020-11-27 17:02:52 +01:00
|
|
|
return tab_array.size
|
2020-03-13 11:48:45 +01:00
|
|
|
}
|
|
|
|
}
|
2020-11-27 17:02:52 +01:00
|
|
|
|
2021-01-13 01:28:08 +01:00
|
|
|
TabLayoutMediator(binding.tabs, binding.viewPager) { tab, position ->
|
2020-11-27 17:02:52 +01:00
|
|
|
tab.icon = ContextCompat.getDrawable(applicationContext,
|
|
|
|
when(position){
|
|
|
|
0 -> R.drawable.ic_home_white_24dp
|
|
|
|
1 -> R.drawable.ic_search_white_24dp
|
|
|
|
2 -> R.drawable.ic_photo_camera_white_24dp
|
|
|
|
3 -> R.drawable.ic_heart
|
|
|
|
4 -> R.drawable.ic_filter_black_24dp
|
|
|
|
else -> throw IllegalArgumentException()
|
|
|
|
})
|
2020-03-13 11:48:45 +01:00
|
|
|
}.attach()
|
2020-03-05 21:07:10 +01:00
|
|
|
}
|
|
|
|
|
2020-03-12 23:27:40 +01:00
|
|
|
/**
|
2020-07-26 20:56:01 +02:00
|
|
|
* Launches the given activity and put it as the current one
|
|
|
|
* @param firstTime to true means the task history will be reset (as if the app were
|
|
|
|
* launched anew into this activity)
|
2020-03-05 22:49:16 +01:00
|
|
|
*/
|
2020-05-19 09:49:34 +02:00
|
|
|
private fun launchActivity(activity: AppCompatActivity, firstTime: Boolean = false) {
|
2020-03-08 12:54:18 +01:00
|
|
|
val intent = Intent(this, activity::class.java)
|
2020-05-19 09:49:34 +02:00
|
|
|
|
|
|
|
if(firstTime){
|
|
|
|
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
|
|
|
}
|
2020-03-08 12:54:18 +01:00
|
|
|
startActivity(intent)
|
2020-03-05 22:49:16 +01:00
|
|
|
}
|
|
|
|
|
2020-03-12 23:27:40 +01:00
|
|
|
/**
|
2020-07-26 20:56:01 +02:00
|
|
|
* Closes the drawer if it is open, when we press the back button
|
2020-03-05 21:07:10 +01:00
|
|
|
*/
|
|
|
|
override fun onBackPressed() {
|
2021-01-13 01:28:08 +01:00
|
|
|
if(binding.drawerLayout.isDrawerOpen(GravityCompat.START)){
|
|
|
|
binding.drawerLayout.closeDrawer(GravityCompat.START)
|
2020-03-05 21:07:10 +01:00
|
|
|
} else {
|
|
|
|
super.onBackPressed()
|
|
|
|
}
|
2020-02-28 17:08:54 +01:00
|
|
|
}
|
2020-03-04 18:04:55 +01:00
|
|
|
|
As a user I want to be able to see posts in a feed (#28)
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* WIP posts
* trying to add images
* WIP posts
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* rebased from master
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* WIP posts
* trying to add images
* WIP posts
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* rebased from master
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* fixed merging errors
* fixed another merge problem
* trying my best to merge
* removed drawable definition in activity_post.xml
* implements swipe motion
add a new class to implement swipe motion
add the swipe right from home page to display settings
passed the homepage in a fragment
* transform profile activity into fragment
transformed profile activity and layout into fragment
linked it with a swipe motion
* Implement swipeable tabs
* Ask for login on first start, add API endpoints, change profile to show the user's profile
* Started converting Post to a fragment
* got a working feed
* WI
* removed non-valid test
* WIP posts
* trying to add images
* WIP posts
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* layout changes
* refactoring
* refactoring
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* fixed merging errors
* trying my best to merge
* removed drawable definition in activity_post.xml
* Started converting Post to a fragment
* got a working feed
* WI
* removed non-valid test
* rebase on other branch
* moved the feed to the home page
* Add tests
* delete test for now
* Adapt test to changes (no more profile from drawer)
* Add unit test for api
* Add test for profile, refactor to allow testing, add exception to security policy to allow tests
* Adapt test to new situation
* Fix typo due to change
* refactor somewhat
* added a feed test
* WIP posts
* trying to add images
* WIP posts
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* WIP posts
* trying to add images
* WIP posts
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* fixed merging errors
* trying my best to merge
* removed drawable definition in activity_post.xml
* Started converting Post to a fragment
* got a working feed
* WI
* removed non-valid test
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* moved a test file
* refactoring
* refactoring
* refactoring
* refactoring
* removed wrong annotation in unit test
* WIP posts
* WIP posts
* WIP posts
* WIP posts
* trying to add images
* trying to add images
* trying to add images
* trying to add images
* Got posts working and linked them to the profile
* Got posts working and linked them to the profile
* added tests for Post
* layout changes
* layout changes
* moved a test file
* refactoring
* refactoring
* refactoring
* refactoring
* removed wrong annotation in unit test
* removed an import that was breaking the build
* removed an import that was breaking the build
* removed tests that broke from merge, will override with master
* removed tests that broke from merge, will override with master
* added UI test for the post activity
* fixed merging errors
* trying my best to merge
* removed drawable definition in activity_post.xml
* Started converting Post to a fragment
* got a working feed
* WI
* removed non-valid test
* rebase on other branch
* moved the feed to the home page
* added a feed test
* added a working feed test
* fixed broken test
* merged with master
* added a max height for images and made profile pictures round
* Added a default image for the post
* created a PostActivity to look a single posts
* fixed buggy postActivity
* Complete overhall of the feed UI
* removed test that didn't please Travis
* removed legacy test
* changed feedAdapter init location (outside of network callback)
Co-authored-by: Matthieu <61561059+Wv5twkFEKh54vo4tta9yu7dHa3@users.noreply.github.com>
Co-authored-by: Ulysse Widmer <ulysse.widmer@epfl.ch>
2020-03-16 09:38:35 +01:00
|
|
|
}
|