Merge branch 'code_reorganize' into 'master'

Reorganize Code

Closes #251

See merge request pixeldroid/PixelDroid!271
This commit is contained in:
Matthieu 2020-12-28 15:25:40 +01:00
commit 7d1c7a2eb7
129 changed files with 693 additions and 793 deletions

View File

@ -24,8 +24,8 @@ android {
applicationId "com.h.pixeldroid" applicationId "com.h.pixeldroid"
minSdkVersion 23 minSdkVersion 23
targetSdkVersion 30 targetSdkVersion 30
versionCode 7 versionCode 8
versionName "1.0.alpha6" versionName "1.0.alpha7"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
testInstrumentationRunnerArguments clearPackageData: 'true' testInstrumentationRunnerArguments clearPackageData: 'true'

View File

@ -9,9 +9,9 @@ import androidx.test.core.app.ApplicationProvider
import androidx.test.espresso.intent.Intents import androidx.test.espresso.intent.Intents
import androidx.test.espresso.intent.matcher.IntentMatchers import androidx.test.espresso.intent.matcher.IntentMatchers
import androidx.test.rule.GrantPermissionRule import androidx.test.rule.GrantPermissionRule
import com.h.pixeldroid.db.entities.InstanceDatabaseEntity import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.fragments.CameraFragment import com.h.pixeldroid.postCreation.camera.CameraFragment
import com.h.pixeldroid.testUtility.clearData import com.h.pixeldroid.testUtility.clearData
import com.h.pixeldroid.testUtility.initDB import com.h.pixeldroid.testUtility.initDB
import kotlinx.android.synthetic.main.camera_ui_container.* import kotlinx.android.synthetic.main.camera_ui_container.*

View File

@ -12,9 +12,9 @@ import androidx.test.espresso.matcher.ViewMatchers.*
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import androidx.test.uiautomator.UiDevice import androidx.test.uiautomator.UiDevice
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.db.entities.InstanceDatabaseEntity import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.testUtility.MockServer import com.h.pixeldroid.testUtility.MockServer
import com.h.pixeldroid.testUtility.clearData import com.h.pixeldroid.testUtility.clearData
import com.h.pixeldroid.testUtility.initDB import com.h.pixeldroid.testUtility.initDB

View File

@ -23,6 +23,7 @@ import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.GrantPermissionRule import androidx.test.rule.GrantPermissionRule
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import com.h.pixeldroid.adapters.ThumbnailAdapter import com.h.pixeldroid.adapters.ThumbnailAdapter
import com.h.pixeldroid.settings.AboutActivity
import com.h.pixeldroid.testUtility.CustomMatchers import com.h.pixeldroid.testUtility.CustomMatchers
import com.h.pixeldroid.testUtility.clearData import com.h.pixeldroid.testUtility.clearData
import junit.framework.Assert.assertTrue import junit.framework.Assert.assertTrue

View File

@ -11,10 +11,10 @@ import androidx.test.espresso.contrib.RecyclerViewActions.scrollToPosition
import androidx.test.espresso.matcher.ViewMatchers.* import androidx.test.espresso.matcher.ViewMatchers.*
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.db.entities.InstanceDatabaseEntity import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.fragments.StatusViewHolder import com.h.pixeldroid.posts.StatusViewHolder
import com.h.pixeldroid.testUtility.CustomMatchers.Companion.atPosition import com.h.pixeldroid.testUtility.CustomMatchers.Companion.atPosition
import com.h.pixeldroid.testUtility.CustomMatchers.Companion.clickChildViewWithId import com.h.pixeldroid.testUtility.CustomMatchers.Companion.clickChildViewWithId
import com.h.pixeldroid.testUtility.CustomMatchers.Companion.first import com.h.pixeldroid.testUtility.CustomMatchers.Companion.first

View File

@ -23,12 +23,13 @@ import androidx.test.espresso.intent.matcher.IntentMatchers
import androidx.test.espresso.matcher.ViewMatchers import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.rule.ActivityTestRule import androidx.test.rule.ActivityTestRule
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.db.entities.InstanceDatabaseEntity import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.fragments.StatusViewHolder import com.h.pixeldroid.posts.StatusViewHolder
import com.h.pixeldroid.objects.Account import com.h.pixeldroid.utils.api.objects.Account
import com.h.pixeldroid.objects.Account.Companion.ACCOUNT_TAG import com.h.pixeldroid.utils.api.objects.Account.Companion.ACCOUNT_TAG
import com.h.pixeldroid.settings.AboutActivity
import com.h.pixeldroid.testUtility.MockServer import com.h.pixeldroid.testUtility.MockServer
import com.h.pixeldroid.testUtility.clearData import com.h.pixeldroid.testUtility.clearData
import com.h.pixeldroid.testUtility.initDB import com.h.pixeldroid.testUtility.initDB

View File

@ -1,27 +1,5 @@
package com.h.pixeldroid package com.h.pixeldroid
import android.content.Context
import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ApplicationProvider
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.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.UiSelector
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.testUtility.clearData
import com.h.pixeldroid.testUtility.initDB
import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.rules.Timeout
import org.junit.runner.RunWith
/* /*
@RunWith(AndroidJUnit4::class) @RunWith(AndroidJUnit4::class)
class LoginActivityOfflineTest { class LoginActivityOfflineTest {

View File

@ -16,9 +16,9 @@ import androidx.test.espresso.matcher.ViewMatchers.hasErrorText
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.db.entities.InstanceDatabaseEntity import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.testUtility.MockServer import com.h.pixeldroid.testUtility.MockServer
import com.h.pixeldroid.testUtility.clearData import com.h.pixeldroid.testUtility.clearData
import com.h.pixeldroid.testUtility.initDB import com.h.pixeldroid.testUtility.initDB

View File

@ -16,9 +16,9 @@ import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.GrantPermissionRule import androidx.test.rule.GrantPermissionRule
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.db.entities.InstanceDatabaseEntity import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.testUtility.MockServer import com.h.pixeldroid.testUtility.MockServer
import com.h.pixeldroid.testUtility.clearData import com.h.pixeldroid.testUtility.clearData
import com.h.pixeldroid.testUtility.initDB import com.h.pixeldroid.testUtility.initDB

View File

@ -13,10 +13,11 @@ import androidx.test.espresso.matcher.ViewMatchers.*
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.posts.PostActivity
import com.h.pixeldroid.db.entities.InstanceDatabaseEntity import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.db.entities.UserDatabaseEntity import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.objects.* import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.utils.api.objects.*
import com.h.pixeldroid.testUtility.MockServer import com.h.pixeldroid.testUtility.MockServer
import com.h.pixeldroid.testUtility.clearData import com.h.pixeldroid.testUtility.clearData
import com.h.pixeldroid.testUtility.initDB import com.h.pixeldroid.testUtility.initDB

View File

@ -2,7 +2,7 @@ package com.h.pixeldroid.testUtility
import android.content.Context import android.content.Context
import androidx.room.Room import androidx.room.Room
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.utils.db.AppDatabase
import org.ligi.tracedroid.TraceDroid import org.ligi.tracedroid.TraceDroid

View File

@ -1,7 +1,7 @@
package com.h.pixeldroid.testUtility package com.h.pixeldroid.testUtility
import com.google.gson.Gson import com.google.gson.Gson
import com.h.pixeldroid.objects.Application import com.h.pixeldroid.utils.api.objects.Application
class JsonValues { class JsonValues {
companion object { companion object {

View File

@ -15,7 +15,7 @@
<uses-feature android:name="android.hardware.location.gps" /> <uses-feature android:name="android.hardware.location.gps" />
<application <application
android:name=".Pixeldroid" android:name=".utils.PixelDroidApplication"
android:allowBackup="false" android:allowBackup="false"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
@ -24,31 +24,31 @@
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme" android:theme="@style/AppTheme"
tools:replace="android:allowBackup"> tools:replace="android:allowBackup">
<activity android:name=".CameraActivity" /> <activity android:name="com.h.pixeldroid.postCreation.camera.CameraActivity" />
<activity <activity
android:name=".ReportActivity" android:name=".posts.ReportActivity"
android:screenOrientation="sensorPortrait" android:screenOrientation="sensorPortrait"
tools:ignore="LockedOrientationActivity" /> tools:ignore="LockedOrientationActivity" />
<activity android:name=".PhotoEditActivity" /> <activity android:name=".postCreation.photoEdit.PhotoEditActivity" />
<activity <activity
android:name=".PostCreationActivity" android:name=".postCreation.PostCreationActivity"
android:screenOrientation="sensorPortrait" android:screenOrientation="sensorPortrait"
android:theme="@style/AppTheme.NoActionBar" android:theme="@style/AppTheme.NoActionBar"
tools:ignore="LockedOrientationActivity" /> tools:ignore="LockedOrientationActivity" />
<activity <activity
android:name=".FollowsActivity" android:name=".profile.FollowsActivity"
android:screenOrientation="sensorPortrait" android:screenOrientation="sensorPortrait"
tools:ignore="LockedOrientationActivity" /> tools:ignore="LockedOrientationActivity" />
<activity <activity
android:name=".PostActivity" android:name=".posts.PostActivity"
android:screenOrientation="sensorPortrait" android:screenOrientation="sensorPortrait"
tools:ignore="LockedOrientationActivity" /> tools:ignore="LockedOrientationActivity" />
<activity <activity
android:name=".ProfileActivity" android:name=".profile.ProfileActivity"
android:screenOrientation="sensorPortrait" android:screenOrientation="sensorPortrait"
tools:ignore="LockedOrientationActivity" /> tools:ignore="LockedOrientationActivity" />
<activity <activity
android:name=".SettingsActivity" android:name=".settings.SettingsActivity"
android:label="@string/title_activity_settings2" android:label="@string/title_activity_settings2"
android:parentActivityName=".MainActivity" android:parentActivityName=".MainActivity"
android:screenOrientation="sensorPortrait" android:screenOrientation="sensorPortrait"
@ -92,7 +92,7 @@
android:theme="@style/AppTheme.NoActionBar" android:theme="@style/AppTheme.NoActionBar"
tools:ignore="LockedOrientationActivity" /> tools:ignore="LockedOrientationActivity" />
<activity <activity
android:name=".SearchActivity" android:name=".searchDiscover.SearchActivity"
android:launchMode="singleTop" android:launchMode="singleTop"
android:screenOrientation="sensorPortrait" android:screenOrientation="sensorPortrait"
tools:ignore="LockedOrientationActivity"> tools:ignore="LockedOrientationActivity">
@ -105,13 +105,13 @@
android:resource="@xml/searchable" /> android:resource="@xml/searchable" />
</activity> </activity>
<activity <activity
android:name=".AboutActivity" android:name=".settings.AboutActivity"
android:parentActivityName=".SettingsActivity" android:parentActivityName=".settings.SettingsActivity"
android:screenOrientation="sensorPortrait" android:screenOrientation="sensorPortrait"
tools:ignore="LockedOrientationActivity" /> tools:ignore="LockedOrientationActivity" />
<activity <activity
android:name=".LicenseActivity" android:name=".settings.LicenseActivity"
android:parentActivityName=".AboutActivity" android:parentActivityName=".settings.AboutActivity"
android:screenOrientation="sensorPortrait" android:screenOrientation="sensorPortrait"
tools:ignore="LockedOrientationActivity" /> tools:ignore="LockedOrientationActivity" />

View File

@ -11,11 +11,13 @@ import android.util.Log
import android.view.View import android.view.View
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
import androidx.browser.customtabs.CustomTabsIntent import androidx.browser.customtabs.CustomTabsIntent
import com.h.pixeldroid.api.PixelfedAPI import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.objects.* import com.h.pixeldroid.utils.db.addUser
import com.h.pixeldroid.utils.DBUtils import com.h.pixeldroid.utils.db.storeInstance
import com.h.pixeldroid.utils.Utils import com.h.pixeldroid.utils.api.objects.*
import com.h.pixeldroid.utils.Utils.Companion.normalizeDomain import com.h.pixeldroid.utils.BaseActivity
import com.h.pixeldroid.utils.hasInternet
import com.h.pixeldroid.utils.normalizeDomain
import io.reactivex.Single import io.reactivex.Single
import io.reactivex.SingleObserver import io.reactivex.SingleObserver
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
@ -67,7 +69,7 @@ class LoginActivity : BaseActivity() {
oauthScheme = getString(R.string.auth_scheme) oauthScheme = getString(R.string.auth_scheme)
preferences = getSharedPreferences("$PACKAGE_ID.pref", Context.MODE_PRIVATE) preferences = getSharedPreferences("$PACKAGE_ID.pref", Context.MODE_PRIVATE)
if (Utils.hasInternet(applicationContext)) { if (hasInternet(applicationContext)) {
connect_instance_button.setOnClickListener { connect_instance_button.setOnClickListener {
registerAppToServer(normalizeDomain(editText.text.toString())) registerAppToServer(normalizeDomain(editText.text.toString()))
} }
@ -269,7 +271,7 @@ class LoginActivity : BaseActivity() {
return failedRegistration(getString(R.string.instance_error)) return failedRegistration(getString(R.string.instance_error))
} }
DBUtils.storeInstance(db, instance) storeInstance(db, instance)
storeUser(token.access_token, token.refresh_token, clientId, clientSecret, instance.uri) storeUser(token.access_token, token.refresh_token, clientId, clientSecret, instance.uri)
wipeSharedSettings() wipeSharedSettings()
} }
@ -311,7 +313,7 @@ class LoginActivity : BaseActivity() {
if (response.body() != null && response.isSuccessful) { if (response.body() != null && response.isSuccessful) {
db.userDao().deActivateActiveUsers() db.userDao().deActivateActiveUsers()
val user = response.body() as Account val user = response.body() as Account
DBUtils.addUser( addUser(
db, db,
user, user,
instance, instance,

View File

@ -16,16 +16,19 @@ import androidx.paging.ExperimentalPagingApi
import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.google.android.material.tabs.TabLayoutMediator import com.google.android.material.tabs.TabLayoutMediator
import com.h.pixeldroid.db.entities.HomeStatusDatabaseEntity import com.h.pixeldroid.utils.db.addUser
import com.h.pixeldroid.db.entities.PublicFeedStatusDatabaseEntity import com.h.pixeldroid.postCreation.camera.CameraFragment
import com.h.pixeldroid.db.entities.UserDatabaseEntity import com.h.pixeldroid.utils.db.entities.HomeStatusDatabaseEntity
import com.h.pixeldroid.fragments.CameraFragment import com.h.pixeldroid.utils.db.entities.PublicFeedStatusDatabaseEntity
import com.h.pixeldroid.fragments.SearchDiscoverFragment import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.fragments.feeds.cachedFeeds.notifications.NotificationsFragment import com.h.pixeldroid.posts.feeds.cachedFeeds.notifications.NotificationsFragment
import com.h.pixeldroid.fragments.feeds.cachedFeeds.postFeeds.PostFeedFragment import com.h.pixeldroid.posts.feeds.cachedFeeds.postFeeds.PostFeedFragment
import com.h.pixeldroid.objects.Account import com.h.pixeldroid.utils.api.objects.Account
import com.h.pixeldroid.utils.DBUtils import com.h.pixeldroid.profile.ProfileActivity
import com.h.pixeldroid.utils.Utils.Companion.hasInternet import com.h.pixeldroid.searchDiscover.SearchDiscoverFragment
import com.h.pixeldroid.settings.SettingsActivity
import com.h.pixeldroid.utils.BaseActivity
import com.h.pixeldroid.utils.hasInternet
import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.materialdrawer.iconics.iconicsIcon import com.mikepenz.materialdrawer.iconics.iconicsIcon
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem import com.mikepenz.materialdrawer.model.PrimaryDrawerItem
@ -193,7 +196,7 @@ class MainActivity : BaseActivity() {
) { ) {
if (response.body() != null && response.isSuccessful) { if (response.body() != null && response.isSuccessful) {
val account = response.body() as Account val account = response.body() as Account
DBUtils.addUser(db, account, domain, accessToken = accessToken, refreshToken = refreshToken, clientId = clientId, clientSecret = clientSecret) addUser(db, account, domain, accessToken = accessToken, refreshToken = refreshToken, clientId = clientId, clientSecret = clientSecret)
fillDrawerAccountInfo(account.id!!) fillDrawerAccountInfo(account.id!!)
} }
} }

View File

@ -1,13 +0,0 @@
package com.h.pixeldroid.interfaces
interface EditImageFragmentListener {
fun onBrightnessChange(brightness: Int)
fun onSaturationChange(saturation: Float)
fun onContrastChange(contrast: Float)
fun onEditStarted()
fun onEditCompleted()
}

View File

@ -1,7 +0,0 @@
package com.h.pixeldroid.interfaces
import com.zomato.photofilters.imageprocessors.Filter
interface FilterListFragmentListener {
fun onFilterSelected(filter: Filter)
}

View File

@ -1,5 +0,0 @@
package com.h.pixeldroid.interfaces
interface PostCreationListener {
fun onClick(position: Int)
}

View File

@ -1,8 +0,0 @@
package com.h.pixeldroid.objects
import java.io.Serializable
data class Context(
val ancestors : List<Status>,
val descendants : List<Status>
) : Serializable

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid package com.h.pixeldroid.postCreation
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
@ -16,13 +16,16 @@ import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textfield.TextInputLayout
import com.h.pixeldroid.api.PixelfedAPI import com.h.pixeldroid.utils.BaseActivity
import com.h.pixeldroid.db.entities.UserDatabaseEntity import com.h.pixeldroid.MainActivity
import com.h.pixeldroid.interfaces.PostCreationListener import com.h.pixeldroid.R
import com.h.pixeldroid.objects.Attachment import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.objects.Instance import com.h.pixeldroid.postCreation.camera.CameraActivity
import com.h.pixeldroid.objects.Status import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.utils.ProgressRequestBody import com.h.pixeldroid.utils.api.objects.Attachment
import com.h.pixeldroid.utils.api.objects.Instance
import com.h.pixeldroid.utils.api.objects.Status
import com.h.pixeldroid.postCreation.photoEdit.PhotoEditActivity
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers import io.reactivex.schedulers.Schedulers
@ -37,7 +40,7 @@ private val TAG = "Post Creation Activity"
private val MORE_PICTURES_REQUEST_CODE = 0xffff private val MORE_PICTURES_REQUEST_CODE = 0xffff
class PostCreationActivity : BaseActivity(), PostCreationListener { class PostCreationActivity : BaseActivity() {
private lateinit var recycler : RecyclerView private lateinit var recycler : RecyclerView
private lateinit var adapter : PostCreationAdapter private lateinit var adapter : PostCreationAdapter
@ -95,7 +98,6 @@ class PostCreationActivity : BaseActivity(), PostCreationListener {
upload() upload()
adapter = PostCreationAdapter(posts) adapter = PostCreationAdapter(posts)
adapter.listener = this
recycler = findViewById(R.id.image_grid) recycler = findViewById(R.id.image_grid)
recycler.layoutManager = GridLayoutManager(this, 3) recycler.layoutManager = GridLayoutManager(this, 3)
recycler.adapter = adapter recycler.adapter = adapter
@ -252,7 +254,7 @@ class PostCreationActivity : BaseActivity(), PostCreationListener {
} }
override fun onClick(position: Int) { fun onClick(position: Int) {
positionResult = position positionResult = position
val intent = Intent(this, PhotoEditActivity::class.java) val intent = Intent(this, PhotoEditActivity::class.java)
@ -296,7 +298,6 @@ class PostCreationActivity : BaseActivity(), PostCreationListener {
} }
inner class PostCreationAdapter(private val posts: ArrayList<String>): RecyclerView.Adapter<PostCreationAdapter.ViewHolder>() { inner class PostCreationAdapter(private val posts: ArrayList<String>): RecyclerView.Adapter<PostCreationAdapter.ViewHolder>() {
var listener: PostCreationListener? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = val view =
@ -335,7 +336,7 @@ class PostCreationActivity : BaseActivity(), PostCreationListener {
.into(itemView.galleryImage) .into(itemView.galleryImage)
// adding click or tap handler for the image layout // adding click or tap handler for the image layout
itemView.setOnClickListener { itemView.setOnClickListener {
listener?.onClick(adapterPosition) this@PostCreationActivity.onClick(adapterPosition)
} }
} }

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.utils package com.h.pixeldroid.postCreation
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.subjects.PublishSubject import io.reactivex.subjects.PublishSubject

View File

@ -1,10 +1,8 @@
package com.h.pixeldroid.utils package com.h.pixeldroid.postCreation
import android.widget.RelativeLayout
import android.os.Build
import android.annotation.TargetApi
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.widget.RelativeLayout
internal class SquareLayout(context: Context, attrs: AttributeSet) : internal class SquareLayout(context: Context, attrs: AttributeSet) :
RelativeLayout(context, attrs) { RelativeLayout(context, attrs) {

View File

@ -1,7 +1,8 @@
package com.h.pixeldroid package com.h.pixeldroid.postCreation.camera
import android.os.Bundle import android.os.Bundle
import com.h.pixeldroid.fragments.CameraFragment import com.h.pixeldroid.utils.BaseActivity
import com.h.pixeldroid.R
class CameraActivity : BaseActivity() { class CameraActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.fragments package com.h.pixeldroid.postCreation.camera
import android.Manifest import android.Manifest
import android.app.Activity import android.app.Activity
@ -31,8 +31,8 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.RequestOptions
import com.h.pixeldroid.PostCreationActivity
import com.h.pixeldroid.R import com.h.pixeldroid.R
import com.h.pixeldroid.postCreation.PostCreationActivity
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.io.File import java.io.File

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.fragments package com.h.pixeldroid.postCreation.photoEdit
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
@ -7,11 +7,10 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.SeekBar import android.widget.SeekBar
import com.h.pixeldroid.R import com.h.pixeldroid.R
import com.h.pixeldroid.interfaces.EditImageFragmentListener
class EditImageFragment : Fragment(), SeekBar.OnSeekBarChangeListener { class EditImageFragment : Fragment(), SeekBar.OnSeekBarChangeListener {
private var listener: EditImageFragmentListener? = null private var listener: PhotoEditActivity? = null
private lateinit var seekbarBrightness: SeekBar private lateinit var seekbarBrightness: SeekBar
private lateinit var seekbarSaturation: SeekBar private lateinit var seekbarSaturation: SeekBar
@ -86,7 +85,7 @@ class EditImageFragment : Fragment(), SeekBar.OnSeekBarChangeListener {
listener!!.onEditCompleted() listener!!.onEditCompleted()
} }
fun setListener(listener: EditImageFragmentListener) { fun setListener(listener: PhotoEditActivity) {
this.listener = listener this.listener = listener
} }
} }

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.adapters package com.h.pixeldroid.postCreation.photoEdit
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
@ -19,7 +19,7 @@ class EditPhotoViewPagerAdapter (manager: FragmentManager):
fragmentTitleList.add(title) fragmentTitleList.add(title)
} }
override fun getPageTitle(position: Int): CharSequence? { override fun getPageTitle(position: Int): CharSequence {
return fragmentTitleList[position] return fragmentTitleList[position]
} }
} }

View File

@ -1,36 +1,28 @@
package com.h.pixeldroid.fragments package com.h.pixeldroid.postCreation.photoEdit
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.ImageDecoder
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.provider.MediaStore import android.provider.MediaStore
import android.util.Log
import android.util.TypedValue import android.util.TypedValue
import androidx.fragment.app.Fragment
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.graphics.decodeBitmap import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.DefaultItemAnimator
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.h.pixeldroid.PhotoEditActivity
import com.h.pixeldroid.R import com.h.pixeldroid.R
import com.h.pixeldroid.adapters.ThumbnailAdapter
import com.h.pixeldroid.interfaces.FilterListFragmentListener
import com.h.pixeldroid.utils.SpaceItemDecoration
import com.zomato.photofilters.FilterPack import com.zomato.photofilters.FilterPack
import com.zomato.photofilters.imageprocessors.Filter import com.zomato.photofilters.imageprocessors.Filter
import com.zomato.photofilters.utils.ThumbnailItem import com.zomato.photofilters.utils.ThumbnailItem
import com.zomato.photofilters.utils.ThumbnailsManager import com.zomato.photofilters.utils.ThumbnailsManager
class FilterListFragment : Fragment(), FilterListFragmentListener { class FilterListFragment : Fragment() {
internal lateinit var recyclerView: RecyclerView private lateinit var recyclerView: RecyclerView
internal var listener : FilterListFragmentListener? = null private var listener : PhotoEditActivity? = null
internal lateinit var adapter: ThumbnailAdapter internal lateinit var adapter: ThumbnailAdapter
internal lateinit var tbItemList: MutableList<ThumbnailItem> private lateinit var tbItemList: MutableList<ThumbnailItem>
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
@ -107,13 +99,13 @@ class FilterListFragment : Fragment(), FilterListFragmentListener {
} }
} }
override fun onFilterSelected(filter: Filter) { fun onFilterSelected(filter: Filter) {
if(listener != null ){ if(listener != null ){
listener!!.onFilterSelected(filter) listener!!.onFilterSelected(filter)
} }
} }
fun setListener(listFragmentListener: FilterListFragmentListener) { fun setListener(listFragmentListener: PhotoEditActivity) {
this.listener = listFragmentListener this.listener = listFragmentListener
} }
} }

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.utils package com.h.pixeldroid.postCreation.photoEdit
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid package com.h.pixeldroid.postCreation.photoEdit
import android.app.Activity import android.app.Activity
import android.app.AlertDialog import android.app.AlertDialog
@ -29,12 +29,9 @@ import com.bumptech.glide.Glide
import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import com.h.pixeldroid.adapters.EditPhotoViewPagerAdapter import com.h.pixeldroid.utils.BaseActivity
import com.h.pixeldroid.fragments.EditImageFragment import com.h.pixeldroid.R
import com.h.pixeldroid.fragments.FilterListFragment import com.h.pixeldroid.postCreation.PostCreationActivity
import com.h.pixeldroid.interfaces.EditImageFragmentListener
import com.h.pixeldroid.interfaces.FilterListFragmentListener
import com.h.pixeldroid.utils.NonSwipeableViewPager
import com.yalantis.ucrop.UCrop import com.yalantis.ucrop.UCrop
import com.zomato.photofilters.imageprocessors.Filter import com.zomato.photofilters.imageprocessors.Filter
import com.zomato.photofilters.imageprocessors.subfilters.BrightnessSubFilter import com.zomato.photofilters.imageprocessors.subfilters.BrightnessSubFilter
@ -58,9 +55,9 @@ private const val REQUEST_CODE_PERMISSIONS_SEND_PHOTO = 7
private val REQUIRED_PERMISSIONS = arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE, private val REQUIRED_PERMISSIONS = arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE) android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
class PhotoEditActivity : BaseActivity(), FilterListFragmentListener, EditImageFragmentListener { class PhotoEditActivity : BaseActivity() {
internal var saving: Boolean = false private var saving: Boolean = false
private val BITMAP_CONFIG = Bitmap.Config.ARGB_8888 private val BITMAP_CONFIG = Bitmap.Config.ARGB_8888
private val BRIGHTNESS_START = 0 private val BRIGHTNESS_START = 0
private val SATURATION_START = 1.0f private val SATURATION_START = 1.0f
@ -76,8 +73,8 @@ class PhotoEditActivity : BaseActivity(), FilterListFragmentListener, EditImageF
private lateinit var filterListFragment: FilterListFragment private lateinit var filterListFragment: FilterListFragment
private lateinit var editImageFragment: EditImageFragment private lateinit var editImageFragment: EditImageFragment
lateinit var viewPager: NonSwipeableViewPager private lateinit var viewPager: NonSwipeableViewPager
lateinit var tabLayout: TabLayout private lateinit var tabLayout: TabLayout
private var brightnessFinal = BRIGHTNESS_START private var brightnessFinal = BRIGHTNESS_START
private var saturationFinal = SATURATION_START private var saturationFinal = SATURATION_START
@ -189,7 +186,7 @@ class PhotoEditActivity : BaseActivity(), FilterListFragmentListener, EditImageF
} }
//</editor-fold> //</editor-fold>
override fun onFilterSelected(filter: Filter) { fun onFilterSelected(filter: Filter) {
resetControls() resetControls()
filteredImage = compressedOriginalImage!!.copy(BITMAP_CONFIG, true) filteredImage = compressedOriginalImage!!.copy(BITMAP_CONFIG, true)
image_preview.setImageBitmap(filter.processFilter(filteredImage)) image_preview.setImageBitmap(filter.processFilter(filteredImage))
@ -219,21 +216,21 @@ class PhotoEditActivity : BaseActivity(), FilterListFragmentListener, EditImageF
} }
} }
override fun onBrightnessChange(brightness: Int) { fun onBrightnessChange(brightness: Int) {
brightnessFinal = brightness brightnessFinal = brightness
val myFilter = Filter() val myFilter = Filter()
myFilter.addEditFilters(brightness, saturationFinal, contrastFinal) myFilter.addEditFilters(brightness, saturationFinal, contrastFinal)
applyFilterAndShowImage(myFilter, filteredImage) applyFilterAndShowImage(myFilter, filteredImage)
} }
override fun onSaturationChange(saturation: Float) { fun onSaturationChange(saturation: Float) {
saturationFinal = saturation saturationFinal = saturation
val myFilter = Filter() val myFilter = Filter()
myFilter.addEditFilters(brightnessFinal, saturation, contrastFinal) myFilter.addEditFilters(brightnessFinal, saturation, contrastFinal)
applyFilterAndShowImage(myFilter, filteredImage) applyFilterAndShowImage(myFilter, filteredImage)
} }
override fun onContrastChange(contrast: Float) { fun onContrastChange(contrast: Float) {
contrastFinal = contrast contrastFinal = contrast
val myFilter = Filter() val myFilter = Filter()
myFilter.addEditFilters(brightnessFinal, saturationFinal, contrast) myFilter.addEditFilters(brightnessFinal, saturationFinal, contrast)
@ -247,10 +244,10 @@ class PhotoEditActivity : BaseActivity(), FilterListFragmentListener, EditImageF
return this return this
} }
override fun onEditStarted() { fun onEditStarted() {
} }
override fun onEditCompleted() { fun onEditCompleted() {
val myFilter = Filter() val myFilter = Filter()
myFilter.addEditFilters(brightnessFinal, saturationFinal, contrastFinal) myFilter.addEditFilters(brightnessFinal, saturationFinal, contrastFinal)
val bitmap = filteredImage.copy(BITMAP_CONFIG, true) val bitmap = filteredImage.copy(BITMAP_CONFIG, true)

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.utils package com.h.pixeldroid.postCreation.photoEdit
import android.graphics.Rect import android.graphics.Rect
import android.view.View import android.view.View

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.adapters package com.h.pixeldroid.postCreation.photoEdit
import android.content.Context import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
@ -9,13 +9,12 @@ import android.widget.TextView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.h.pixeldroid.R import com.h.pixeldroid.R
import com.h.pixeldroid.interfaces.FilterListFragmentListener
import com.zomato.photofilters.utils.ThumbnailItem import com.zomato.photofilters.utils.ThumbnailItem
import kotlinx.android.synthetic.main.thumbnail_list_item.view.* import kotlinx.android.synthetic.main.thumbnail_list_item.view.*
class ThumbnailAdapter (private val context: Context, class ThumbnailAdapter (private val context: Context,
private val tbItemList: List<ThumbnailItem>, private val tbItemList: List<ThumbnailItem>,
private val listener: FilterListFragmentListener): RecyclerView.Adapter<ThumbnailAdapter.MyViewHolder>() { private val listener: FilterListFragment): RecyclerView.Adapter<ThumbnailAdapter.MyViewHolder>() {
private var selectedIndex = 0 private var selectedIndex = 0

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.utils.customSpans package com.h.pixeldroid.posts
import android.text.TextPaint import android.text.TextPaint
import android.text.style.ClickableSpan import android.text.style.ClickableSpan

View File

@ -0,0 +1,141 @@
package com.h.pixeldroid.posts
import android.content.Context
import android.os.Build
import android.text.Html
import android.text.SpannableStringBuilder
import android.text.Spanned
import android.text.style.ClickableSpan
import android.text.style.URLSpan
import android.util.Log
import android.view.View
import android.widget.TextView
import android.widget.Toast
import androidx.core.text.toSpanned
import com.h.pixeldroid.R
import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.utils.api.objects.Account.Companion.getAccountFromId
import com.h.pixeldroid.utils.api.objects.Mention
import java.net.URI
import java.net.URISyntaxException
import java.text.ParseException
import java.util.*
fun fromHtml(html: String): Spanned {
val result: Spanned = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY)
} else {
@Suppress("DEPRECATION")
Html.fromHtml(html)
}
return result.trim().toSpanned()
}
fun getDomain(urlString: String?): String {
val uri: URI
try {
uri = URI(urlString!!)
} catch (e: URISyntaxException) {
return ""
}
val host: String = uri.host
return if (host.startsWith("www.")) {
host.substring(4)
} else {
host
}
}
fun parseHTMLText(
text : String,
mentions: List<Mention>?,
api : PixelfedAPI,
context: Context,
credential: String
) : Spanned {
//Convert text to spannable
val content = fromHtml(text)
//Retrive all links that should be made clickable
val builder = SpannableStringBuilder(content)
val urlSpans = content.getSpans(0, content.length, URLSpan::class.java)
for(span in urlSpans) {
val start = builder.getSpanStart(span)
val end = builder.getSpanEnd(span)
val flags = builder.getSpanFlags(span)
val text = builder.subSequence(start, end)
var customSpan: ClickableSpan? = null
//Handle hashtags
if (text[0] == '#') {
val tag = text.subSequence(1, text.length).toString()
customSpan = object : ClickableSpanNoUnderline() {
override fun onClick(widget: View) {
Toast.makeText(context, tag, Toast.LENGTH_SHORT).show()
}
}
}
//Handle mentions
if(text[0] == '@' && !mentions.isNullOrEmpty()) {
val accountUsername = text.subSequence(1, text.length).toString()
var id: String? = null
//Go through all mentions stored in the status
for (mention in mentions) {
if (mention.username.equals(accountUsername, ignoreCase = true)
) {
id = mention.id
//Mentions can be of users in other domains
if (mention.url.contains(getDomain(span.url))) {
break
}
}
}
//Check that we found a user for the given mention
if (id != null) {
val accountId: String = id
customSpan = object : ClickableSpanNoUnderline() {
override fun onClick(widget: View) {
Log.e("MENTION", "CLICKED")
//Retrieve the account for the given profile
getAccountFromId(accountId, api, context, credential)
}
}
}
}
builder.removeSpan(span)
builder.setSpan(customSpan, start, end, flags)
// Add zero-width space after links in end of line to fix its too large hitbox.
if (end >= builder.length || builder.subSequence(end, end + 1).toString() == "\n") {
builder.insert(end, "\u200B")
}
}
return builder
}
fun setTextViewFromISO8601(date: Date, textView: TextView, absoluteTime: Boolean, context: Context) {
val now = Date().time
try {
val then = date.time
val formattedDate = android.text.format.DateUtils
.getRelativeTimeSpanString(then, now,
android.text.format.DateUtils.SECOND_IN_MILLIS,
android.text.format.DateUtils.FORMAT_ABBREV_RELATIVE)
textView.text = if(absoluteTime) context.getString(R.string.posted_on).format(date)
else "$formattedDate"
} catch (e: ParseException) {
e.printStackTrace()
}
}

View File

@ -1,18 +1,19 @@
package com.h.pixeldroid package com.h.pixeldroid.posts
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import com.h.pixeldroid.fragments.PostFragment import androidx.lifecycle.lifecycleScope
import com.h.pixeldroid.objects.DiscoverPost import com.h.pixeldroid.R
import com.h.pixeldroid.objects.Status import com.h.pixeldroid.utils.api.objects.DiscoverPost
import com.h.pixeldroid.objects.Status.Companion.DISCOVER_TAG import com.h.pixeldroid.utils.api.objects.Status
import com.h.pixeldroid.objects.Status.Companion.DOMAIN_TAG import com.h.pixeldroid.utils.api.objects.Status.Companion.DISCOVER_TAG
import com.h.pixeldroid.objects.Status.Companion.POST_TAG import com.h.pixeldroid.utils.api.objects.Status.Companion.DOMAIN_TAG
import com.h.pixeldroid.utils.api.objects.Status.Companion.POST_TAG
import com.h.pixeldroid.utils.BaseActivity
import kotlinx.android.synthetic.main.activity_post.* import kotlinx.android.synthetic.main.activity_post.*
import retrofit2.Call import retrofit2.HttpException
import retrofit2.Callback import java.io.IOException
import retrofit2.Response
class PostActivity : BaseActivity() { class PostActivity : BaseActivity() {
private lateinit var postFragment : PostFragment private lateinit var postFragment : PostFragment
@ -55,26 +56,24 @@ class PostActivity : BaseActivity() {
) { ) {
val api = apiHolder.api ?: apiHolder.setDomainToCurrentUser(db) val api = apiHolder.api ?: apiHolder.setDomainToCurrentUser(db)
val id = discoverPost.url?.substringAfterLast('/') ?: "" val id = discoverPost.url?.substringAfterLast('/') ?: ""
api.getStatus("Bearer $accessToken", id).enqueue(object : Callback<Status> { lifecycleScope.launchWhenCreated {
try {
override fun onFailure(call: Call<Status>, t: Throwable) { val status = api.getStatus("Bearer $accessToken", id)
Log.e("PostActivity:", t.toString()) postProgressBar.visibility = View.GONE
initializeFragment(arguments, status)
} catch (exception: IOException) {
//TODO show error message
Log.e("PostActivity:", exception.toString())
} catch (exception: HttpException) {
} }
}
override fun onResponse(call: Call<Status>, response: Response<Status>) {
if(response.code() == 200) {
val status = response.body()!!
postProgressBar.visibility = View.GONE
initializeFragment(arguments, status)
}
}
})
} }
private fun initializeFragment(arguments: Bundle, status: Status?){ private fun initializeFragment(arguments: Bundle, status: Status?){
supportActionBar?.title = getString(R.string.post_title).format(status!!.account?.getDisplayName()) supportActionBar?.title = getString(R.string.post_title).format(status!!.account?.getDisplayName())
arguments.putSerializable(POST_TAG, status) arguments.putSerializable(POST_TAG, status)
postFragment.arguments = arguments postFragment.arguments = arguments
supportFragmentManager.isStateSaved
supportFragmentManager.beginTransaction() supportFragmentManager.beginTransaction()
.add(R.id.postFragmentSingle, postFragment).commit() .add(R.id.postFragmentSingle, postFragment).commit()
postFragmentSingle.visibility = View.VISIBLE postFragmentSingle.visibility = View.VISIBLE

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.fragments package com.h.pixeldroid.posts
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
@ -6,9 +6,10 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.h.pixeldroid.R import com.h.pixeldroid.R
import com.h.pixeldroid.objects.Status import com.h.pixeldroid.utils.api.objects.Status
import com.h.pixeldroid.objects.Status.Companion.DOMAIN_TAG import com.h.pixeldroid.utils.api.objects.Status.Companion.DOMAIN_TAG
import com.h.pixeldroid.objects.Status.Companion.POST_TAG import com.h.pixeldroid.utils.api.objects.Status.Companion.POST_TAG
import com.h.pixeldroid.utils.BaseFragment
class PostFragment : BaseFragment() { class PostFragment : BaseFragment() {

View File

@ -1,10 +1,12 @@
package com.h.pixeldroid package com.h.pixeldroid.posts
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import com.h.pixeldroid.objects.Report import com.h.pixeldroid.R
import com.h.pixeldroid.objects.Status import com.h.pixeldroid.utils.api.objects.Report
import com.h.pixeldroid.utils.api.objects.Status
import com.h.pixeldroid.utils.BaseActivity
import kotlinx.android.synthetic.main.activity_report.* import kotlinx.android.synthetic.main.activity_report.*
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.fragments package com.h.pixeldroid.posts
import android.Manifest import android.Manifest
import android.app.AlertDialog import android.app.AlertDialog
@ -23,15 +23,12 @@ import com.bumptech.glide.RequestBuilder
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import com.google.android.material.tabs.TabLayoutMediator import com.google.android.material.tabs.TabLayoutMediator
import com.h.pixeldroid.R import com.h.pixeldroid.R
import com.h.pixeldroid.ReportActivity import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.api.PixelfedAPI import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.utils.api.objects.Attachment
import com.h.pixeldroid.objects.Attachment import com.h.pixeldroid.utils.api.objects.Context
import com.h.pixeldroid.objects.Context import com.h.pixeldroid.utils.api.objects.Status
import com.h.pixeldroid.objects.Status
import com.h.pixeldroid.utils.HtmlUtils
import com.h.pixeldroid.utils.ImageConverter import com.h.pixeldroid.utils.ImageConverter
import com.h.pixeldroid.utils.Utils
import com.karumi.dexter.Dexter import com.karumi.dexter.Dexter
import com.karumi.dexter.listener.PermissionDeniedResponse import com.karumi.dexter.listener.PermissionDeniedResponse
import com.karumi.dexter.listener.PermissionGrantedResponse import com.karumi.dexter.listener.PermissionGrantedResponse
@ -98,7 +95,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
} }
fun setupPost( private fun setupPost(
rootView: View, rootView: View,
request: RequestBuilder<Drawable>, request: RequestBuilder<Drawable>,
//homeFragment: Fragment, //homeFragment: Fragment,
@ -128,7 +125,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
} }
//Convert the date to a readable string //Convert the date to a readable string
Utils.setTextViewFromISO8601( setTextViewFromISO8601(
status?.created_at!!, status?.created_at!!,
rootView.postDate, rootView.postDate,
isActivity, isActivity,
@ -160,7 +157,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
rootView.findViewById<LinearLayout>(R.id.commentContainer).visibility = View.GONE rootView.findViewById<LinearLayout>(R.id.commentContainer).visibility = View.GONE
} }
fun setupPostPics( private fun setupPostPics(
rootView: View, rootView: View,
request: RequestBuilder<Drawable>, request: RequestBuilder<Drawable>,
//homeFragment: Fragment //homeFragment: Fragment
@ -192,7 +189,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
} }
} }
fun setupTabsLayout( private fun setupTabsLayout(
rootView: View, rootView: View,
request: RequestBuilder<Drawable>, request: RequestBuilder<Drawable>,
) { ) {
@ -209,18 +206,18 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
}.attach() }.attach()
} }
fun setDescription(rootView: View, api: PixelfedAPI, credential: String) { private fun setDescription(rootView: View, api: PixelfedAPI, credential: String) {
rootView.findViewById<TextView>(R.id.description).apply { rootView.findViewById<TextView>(R.id.description).apply {
if (status?.content.isNullOrBlank()) { if (status?.content.isNullOrBlank()) {
visibility = View.GONE visibility = View.GONE
} else { } else {
text = HtmlUtils.parseHTMLText(status?.content.orEmpty(), status?.mentions, api, rootView.context, credential) text = parseHTMLText(status?.content.orEmpty(), status?.mentions, api, rootView.context, credential)
movementMethod = LinkMovementMethod.getInstance() movementMethod = LinkMovementMethod.getInstance()
} }
} }
} }
fun activateButtons(holder: StatusViewHolder, api: PixelfedAPI, db: AppDatabase, lifecycleScope: LifecycleCoroutineScope){ private fun activateButtons(holder: StatusViewHolder, api: PixelfedAPI, db: AppDatabase, lifecycleScope: LifecycleCoroutineScope){
val user = db.userDao().getActiveUser()!! val user = db.userDao().getActiveUser()!!
val credential = "Bearer ${user.accessToken}" val credential = "Bearer ${user.accessToken}"
@ -246,7 +243,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
activateMoreButton(holder, api, db, lifecycleScope) activateMoreButton(holder, api, db, lifecycleScope)
} }
fun activateReblogger( private fun activateReblogger(
holder: StatusViewHolder, holder: StatusViewHolder,
api: PixelfedAPI, api: PixelfedAPI,
credential: String, credential: String,
@ -271,7 +268,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
} }
} }
fun reblogPost( private fun reblogPost(
holder : StatusViewHolder, holder : StatusViewHolder,
api: PixelfedAPI, api: PixelfedAPI,
credential: String credential: String
@ -301,7 +298,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
} }
} }
fun undoReblogPost( private fun undoReblogPost(
holder : StatusViewHolder, holder : StatusViewHolder,
api: PixelfedAPI, api: PixelfedAPI,
credential: String, credential: String,
@ -331,7 +328,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
} }
} }
fun activateMoreButton(holder: StatusViewHolder, api: PixelfedAPI, db: AppDatabase, lifecycleScope: LifecycleCoroutineScope){ private fun activateMoreButton(holder: StatusViewHolder, api: PixelfedAPI, db: AppDatabase, lifecycleScope: LifecycleCoroutineScope){
holder.more.setOnClickListener { holder.more.setOnClickListener {
PopupMenu(it.context, it).apply { PopupMenu(it.context, it).apply {
setOnMenuItemClickListener { item -> setOnMenuItemClickListener { item ->
@ -448,7 +445,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
} }
fun activateDoubleTapLiker( private fun activateDoubleTapLiker(
holder: StatusViewHolder, holder: StatusViewHolder,
api: PixelfedAPI, api: PixelfedAPI,
credential: String credential: String
@ -481,7 +478,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
} }
} }
fun activateLiker( private fun activateLiker(
holder: StatusViewHolder, holder: StatusViewHolder,
api: PixelfedAPI, api: PixelfedAPI,
credential: String, credential: String,
@ -507,7 +504,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
} }
} }
fun likePostCall( private fun likePostCall(
holder : StatusViewHolder, holder : StatusViewHolder,
api: PixelfedAPI, api: PixelfedAPI,
credential: String, credential: String,
@ -537,7 +534,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
} }
} }
fun unLikePostCall( private fun unLikePostCall(
holder : StatusViewHolder, holder : StatusViewHolder,
api: PixelfedAPI, api: PixelfedAPI,
credential: String, credential: String,
@ -568,7 +565,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
} }
} }
fun showComments( private fun showComments(
holder: StatusViewHolder, holder: StatusViewHolder,
api: PixelfedAPI, api: PixelfedAPI,
credential: String credential: String
@ -589,7 +586,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
} }
} }
fun activateCommenter( private fun activateCommenter(
holder: StatusViewHolder, holder: StatusViewHolder,
api: PixelfedAPI, api: PixelfedAPI,
credential: String credential: String
@ -615,7 +612,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
} }
} }
fun toggleCommentInput( private fun toggleCommentInput(
holder : StatusViewHolder holder : StatusViewHolder
) { ) {
//Toggle comment button //Toggle comment button
@ -650,7 +647,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
view.commentText.text = commentContent view.commentText.text = commentContent
} }
fun retrieveComments( private fun retrieveComments(
holder : StatusViewHolder, holder : StatusViewHolder,
api: PixelfedAPI, api: PixelfedAPI,
credential: String, credential: String,
@ -686,7 +683,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
} }
} }
fun postComment( private fun postComment(
holder : StatusViewHolder, holder : StatusViewHolder,
api: PixelfedAPI, api: PixelfedAPI,
credential: String, credential: String,

View File

@ -1,11 +1,7 @@
package com.h.pixeldroid.fragments.feeds package com.h.pixeldroid.posts.feeds
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ProgressBar
import androidx.annotation.StringRes
import androidx.constraintlayout.motion.widget.MotionLayout
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.view.size import androidx.core.view.size
import androidx.paging.LoadState import androidx.paging.LoadState

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.fragments.feeds.cachedFeeds package com.h.pixeldroid.posts.feeds.cachedFeeds
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
@ -17,11 +17,11 @@ import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import com.h.pixeldroid.databinding.FragmentFeedBinding import com.h.pixeldroid.databinding.FragmentFeedBinding
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.db.dao.feedContent.FeedContentDao import com.h.pixeldroid.utils.db.dao.feedContent.FeedContentDao
import com.h.pixeldroid.fragments.BaseFragment import com.h.pixeldroid.utils.BaseFragment
import com.h.pixeldroid.fragments.feeds.initAdapter import com.h.pixeldroid.posts.feeds.initAdapter
import com.h.pixeldroid.objects.FeedContentDatabase import com.h.pixeldroid.utils.api.objects.FeedContentDatabase
/** /**

View File

@ -14,12 +14,12 @@
* limitations under the License. * limitations under the License.
*/ */
package com.h.pixeldroid.fragments.feeds.cachedFeeds package com.h.pixeldroid.posts.feeds.cachedFeeds
import androidx.paging.* import androidx.paging.*
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.db.dao.feedContent.FeedContentDao import com.h.pixeldroid.utils.db.dao.feedContent.FeedContentDao
import com.h.pixeldroid.objects.FeedContentDatabase import com.h.pixeldroid.utils.api.objects.FeedContentDatabase
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import javax.inject.Inject import javax.inject.Inject

View File

@ -14,12 +14,12 @@
* limitations under the License. * limitations under the License.
*/ */
package com.h.pixeldroid.fragments.feeds.cachedFeeds package com.h.pixeldroid.posts.feeds.cachedFeeds
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import androidx.paging.* import androidx.paging.*
import com.h.pixeldroid.objects.FeedContentDatabase import com.h.pixeldroid.utils.api.objects.FeedContentDatabase
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
/** /**

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.fragments.feeds.cachedFeeds.notifications package com.h.pixeldroid.posts.feeds.cachedFeeds.notifications
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
@ -16,22 +16,22 @@ import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.h.pixeldroid.PostActivity import com.h.pixeldroid.posts.PostActivity
import com.h.pixeldroid.ProfileActivity import com.h.pixeldroid.profile.ProfileActivity
import com.h.pixeldroid.R import com.h.pixeldroid.R
import com.h.pixeldroid.api.PixelfedAPI import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.di.PixelfedAPIHolder import com.h.pixeldroid.utils.di.PixelfedAPIHolder
import com.h.pixeldroid.objects.Account import com.h.pixeldroid.utils.api.objects.Account
import com.h.pixeldroid.objects.Notification import com.h.pixeldroid.utils.api.objects.Notification
import com.h.pixeldroid.objects.Status import com.h.pixeldroid.utils.api.objects.Status
import com.h.pixeldroid.utils.Utils.Companion.setTextViewFromISO8601
import kotlinx.android.synthetic.main.fragment_notifications.view.* import kotlinx.android.synthetic.main.fragment_notifications.view.*
import com.h.pixeldroid.fragments.feeds.cachedFeeds.CachedFeedFragment import com.h.pixeldroid.posts.feeds.cachedFeeds.CachedFeedFragment
import com.h.pixeldroid.fragments.feeds.cachedFeeds.FeedViewModel import com.h.pixeldroid.posts.feeds.cachedFeeds.FeedViewModel
import com.h.pixeldroid.fragments.feeds.cachedFeeds.ViewModelFactory import com.h.pixeldroid.posts.feeds.cachedFeeds.ViewModelFactory
import com.h.pixeldroid.utils.HtmlUtils.Companion.parseHTMLText import com.h.pixeldroid.posts.parseHTMLText
import com.h.pixeldroid.posts.setTextViewFromISO8601
/** /**
@ -83,48 +83,50 @@ class NotificationViewHolder(view: View) : RecyclerView.ViewHolder(view) {
} }
private fun Notification.openActivity() { private fun Notification.openActivity() {
val intent: Intent val intent: Intent =
when (type){ when (type){
Notification.NotificationType.mention, Notification.NotificationType.favourite, Notification.NotificationType.mention, Notification.NotificationType.favourite,
Notification.NotificationType.poll, Notification.NotificationType.reblog -> { Notification.NotificationType.poll, Notification.NotificationType.reblog -> {
intent = openPostFromNotification() openPostFromNotification()
} }
Notification.NotificationType.follow -> { Notification.NotificationType.follow -> {
intent = Intent(itemView.context, ProfileActivity::class.java) Intent(itemView.context, ProfileActivity::class.java).apply {
intent.putExtra(Account.ACCOUNT_TAG, account) putExtra(Account.ACCOUNT_TAG, account)
}
} }
null -> return //TODO show an error here?
} }
itemView.context.startActivity(intent) itemView.context.startActivity(intent)
} }
private fun Notification.openPostFromNotification(): Intent { private fun Notification.openPostFromNotification(): Intent =
val intent = Intent(itemView.context, PostActivity::class.java) Intent(itemView.context, PostActivity::class.java).apply {
intent.putExtra(Status.POST_TAG, status) putExtra(Status.POST_TAG, status)
return intent }
}
private fun setNotificationType(type: Notification.NotificationType, username: String, private fun setNotificationType(type: Notification.NotificationType,
username: String,
textView: TextView textView: TextView
){ ){
val context = textView.context val context = textView.context
val (format: String, drawable: Drawable?) = when(type) { val (format: String, drawable: Drawable?) = when(type) {
Notification.NotificationType.follow -> { Notification.NotificationType.follow -> {
setNotificationTypeTextView(context, R.string.followed_notification, R.drawable.ic_follow) getStringAndDrawable(context, R.string.followed_notification, R.drawable.ic_follow)
} }
Notification.NotificationType.mention -> { Notification.NotificationType.mention -> {
setNotificationTypeTextView(context, R.string.mention_notification, R.drawable.ic_apenstaart) getStringAndDrawable(context, R.string.mention_notification, R.drawable.ic_apenstaart)
} }
Notification.NotificationType.reblog -> { Notification.NotificationType.reblog -> {
setNotificationTypeTextView(context, R.string.shared_notification, R.drawable.ic_reblog_blue) getStringAndDrawable(context, R.string.shared_notification, R.drawable.ic_reblog_blue)
} }
Notification.NotificationType.favourite -> { Notification.NotificationType.favourite -> {
setNotificationTypeTextView(context, R.string.liked_notification, R.drawable.ic_like_full) getStringAndDrawable(context, R.string.liked_notification, R.drawable.ic_like_full)
} }
Notification.NotificationType.poll -> { Notification.NotificationType.poll -> {
setNotificationTypeTextView(context, R.string.poll_notification, R.drawable.poll) getStringAndDrawable(context, R.string.poll_notification, R.drawable.poll)
} }
} }
textView.text = format.format(username) textView.text = format.format(username)
@ -132,9 +134,9 @@ class NotificationViewHolder(view: View) : RecyclerView.ViewHolder(view) {
drawable,null,null,null drawable,null,null,null
) )
} }
private fun setNotificationTypeTextView(context: Context, format: Int, drawable: Int): Pair<String, Drawable?> {
return Pair(context.getString(format), ContextCompat.getDrawable(context, drawable)) private fun getStringAndDrawable(context: Context, stringToFormat: Int, drawable: Int): Pair<String, Drawable?>
} = Pair(context.getString(stringToFormat), ContextCompat.getDrawable(context, drawable))
@ -152,7 +154,7 @@ class NotificationViewHolder(view: View) : RecyclerView.ViewHolder(view) {
photoThumbnail.visibility = View.GONE photoThumbnail.visibility = View.GONE
} }
notification?.type?.let { setNotificationType(it, notification.account.username!!, notificationType) } notification?.type?.let { notification.account?.username?.let { username -> setNotificationType(it, username, notificationType) } }
notification?.created_at?.let { setTextViewFromISO8601(it, notificationTime, false, itemView.context) } notification?.created_at?.let { setTextViewFromISO8601(it, notificationTime, false, itemView.context) }
//Convert HTML to clickable text //Convert HTML to clickable text

View File

@ -14,13 +14,13 @@
* limitations under the License. * limitations under the License.
*/ */
package com.h.pixeldroid.fragments.feeds.cachedFeeds.notifications package com.h.pixeldroid.posts.feeds.cachedFeeds.notifications
import androidx.paging.* import androidx.paging.*
import androidx.room.withTransaction import androidx.room.withTransaction
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.di.PixelfedAPIHolder import com.h.pixeldroid.utils.di.PixelfedAPIHolder
import com.h.pixeldroid.objects.Notification import com.h.pixeldroid.utils.api.objects.Notification
import retrofit2.HttpException import retrofit2.HttpException
import java.io.IOException import java.io.IOException
import javax.inject.Inject import javax.inject.Inject
@ -57,7 +57,7 @@ class NotificationsRemoteMediator @Inject constructor(
try { try {
val user = db.userDao().getActiveUser()!! val user = db.userDao().getActiveUser()!!
val api = apiHolder.api ?: apiHolder.setDomainToCurrentUser(db) val api = apiHolder.api ?: apiHolder.setDomainToCurrentUser(db)
val accessToken = user.accessToken.orEmpty() val accessToken = user.accessToken
val apiResponse = api.notifications("Bearer $accessToken", val apiResponse = api.notifications("Bearer $accessToken",
max_id = max_id, max_id = max_id,

View File

@ -1,10 +1,10 @@
package com.h.pixeldroid.fragments.feeds.cachedFeeds.postFeeds package com.h.pixeldroid.posts.feeds.cachedFeeds.postFeeds
import androidx.paging.* import androidx.paging.*
import androidx.room.withTransaction import androidx.room.withTransaction
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.di.PixelfedAPIHolder import com.h.pixeldroid.utils.di.PixelfedAPIHolder
import com.h.pixeldroid.db.entities.HomeStatusDatabaseEntity import com.h.pixeldroid.utils.db.entities.HomeStatusDatabaseEntity
import retrofit2.HttpException import retrofit2.HttpException
import java.io.IOException import java.io.IOException
import javax.inject.Inject import javax.inject.Inject
@ -42,7 +42,7 @@ class HomeFeedRemoteMediator @Inject constructor(
try { try {
val user = db.userDao().getActiveUser()!! val user = db.userDao().getActiveUser()!!
val api = apiHolder.api ?: apiHolder.setDomainToCurrentUser(db) val api = apiHolder.api ?: apiHolder.setDomainToCurrentUser(db)
val accessToken = user.accessToken.orEmpty() val accessToken = user.accessToken
val apiResponse = api.timelineHome( "Bearer $accessToken", val apiResponse = api.timelineHome( "Bearer $accessToken",
max_id= max_id, min_id = min_id, max_id= max_id, min_id = min_id,

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.fragments.feeds.cachedFeeds.postFeeds package com.h.pixeldroid.posts.feeds.cachedFeeds.postFeeds
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
@ -12,13 +12,13 @@ import androidx.paging.RemoteMediator
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.h.pixeldroid.R import com.h.pixeldroid.R
import com.h.pixeldroid.db.dao.feedContent.FeedContentDao import com.h.pixeldroid.utils.db.dao.feedContent.FeedContentDao
import com.h.pixeldroid.fragments.StatusViewHolder import com.h.pixeldroid.posts.StatusViewHolder
import com.h.pixeldroid.fragments.feeds.cachedFeeds.FeedViewModel import com.h.pixeldroid.posts.feeds.cachedFeeds.FeedViewModel
import com.h.pixeldroid.fragments.feeds.cachedFeeds.CachedFeedFragment import com.h.pixeldroid.posts.feeds.cachedFeeds.CachedFeedFragment
import com.h.pixeldroid.fragments.feeds.cachedFeeds.ViewModelFactory import com.h.pixeldroid.posts.feeds.cachedFeeds.ViewModelFactory
import com.h.pixeldroid.objects.FeedContentDatabase import com.h.pixeldroid.utils.api.objects.FeedContentDatabase
import com.h.pixeldroid.objects.Status import com.h.pixeldroid.utils.api.objects.Status
/** /**

View File

@ -14,13 +14,13 @@
* limitations under the License. * limitations under the License.
*/ */
package com.h.pixeldroid.fragments.feeds.cachedFeeds.postFeeds package com.h.pixeldroid.posts.feeds.cachedFeeds.postFeeds
import androidx.paging.* import androidx.paging.*
import androidx.room.withTransaction import androidx.room.withTransaction
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.db.entities.PublicFeedStatusDatabaseEntity import com.h.pixeldroid.utils.db.entities.PublicFeedStatusDatabaseEntity
import com.h.pixeldroid.di.PixelfedAPIHolder import com.h.pixeldroid.utils.di.PixelfedAPIHolder
import retrofit2.HttpException import retrofit2.HttpException
import java.io.IOException import java.io.IOException
import javax.inject.Inject import javax.inject.Inject

View File

@ -1,9 +1,9 @@
package com.h.pixeldroid.fragments.feeds.uncachedFeeds package com.h.pixeldroid.posts.feeds.uncachedFeeds
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import androidx.paging.* import androidx.paging.*
import com.h.pixeldroid.objects.FeedContent import com.h.pixeldroid.utils.api.objects.FeedContent
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
/** /**

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.fragments.feeds.uncachedFeeds package com.h.pixeldroid.posts.feeds.uncachedFeeds
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
@ -17,9 +17,9 @@ import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import com.h.pixeldroid.databinding.FragmentFeedBinding import com.h.pixeldroid.databinding.FragmentFeedBinding
import com.h.pixeldroid.fragments.BaseFragment import com.h.pixeldroid.utils.BaseFragment
import com.h.pixeldroid.fragments.feeds.initAdapter import com.h.pixeldroid.posts.feeds.initAdapter
import com.h.pixeldroid.objects.FeedContent import com.h.pixeldroid.utils.api.objects.FeedContent
/** /**

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.fragments.feeds.uncachedFeeds.accountLists package com.h.pixeldroid.posts.feeds.uncachedFeeds.accountLists
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.os.Bundle import android.os.Bundle
@ -14,12 +14,12 @@ import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.h.pixeldroid.R import com.h.pixeldroid.R
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.FeedViewModel import com.h.pixeldroid.posts.feeds.uncachedFeeds.FeedViewModel
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.UncachedFeedFragment import com.h.pixeldroid.posts.feeds.uncachedFeeds.UncachedFeedFragment
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.ViewModelFactory import com.h.pixeldroid.posts.feeds.uncachedFeeds.ViewModelFactory
import com.h.pixeldroid.objects.Account import com.h.pixeldroid.utils.api.objects.Account
import com.h.pixeldroid.objects.Account.Companion.ACCOUNT_ID_TAG import com.h.pixeldroid.utils.api.objects.Account.Companion.ACCOUNT_ID_TAG
import com.h.pixeldroid.objects.Account.Companion.FOLLOWERS_TAG import com.h.pixeldroid.utils.api.objects.Account.Companion.FOLLOWERS_TAG
import kotlinx.android.synthetic.main.account_list_entry.view.* import kotlinx.android.synthetic.main.account_list_entry.view.*

View File

@ -1,12 +1,12 @@
package com.h.pixeldroid.fragments.feeds.uncachedFeeds.accountLists package com.h.pixeldroid.posts.feeds.uncachedFeeds.accountLists
import androidx.paging.ExperimentalPagingApi import androidx.paging.ExperimentalPagingApi
import androidx.paging.Pager import androidx.paging.Pager
import androidx.paging.PagingConfig import androidx.paging.PagingConfig
import androidx.paging.PagingData import androidx.paging.PagingData
import com.h.pixeldroid.api.PixelfedAPI import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.UncachedContentRepository import com.h.pixeldroid.posts.feeds.uncachedFeeds.UncachedContentRepository
import com.h.pixeldroid.objects.Account import com.h.pixeldroid.utils.api.objects.Account
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import javax.inject.Inject import javax.inject.Inject

View File

@ -1,8 +1,8 @@
package com.h.pixeldroid.fragments.feeds.uncachedFeeds.accountLists package com.h.pixeldroid.posts.feeds.uncachedFeeds.accountLists
import androidx.paging.PagingSource import androidx.paging.PagingSource
import com.h.pixeldroid.api.PixelfedAPI import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.objects.Account import com.h.pixeldroid.utils.api.objects.Account
import retrofit2.HttpException import retrofit2.HttpException
import java.io.IOException import java.io.IOException

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.fragments.feeds.uncachedFeeds.search package com.h.pixeldroid.posts.feeds.uncachedFeeds.search
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
@ -6,10 +6,10 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.paging.ExperimentalPagingApi import androidx.paging.ExperimentalPagingApi
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.* import com.h.pixeldroid.posts.feeds.uncachedFeeds.*
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.accountLists.AccountAdapter import com.h.pixeldroid.posts.feeds.uncachedFeeds.accountLists.AccountAdapter
import com.h.pixeldroid.objects.Account import com.h.pixeldroid.utils.api.objects.Account
import com.h.pixeldroid.objects.Results import com.h.pixeldroid.utils.api.objects.Results
/** /**
* Fragment to show a list of [Account]s, as a result of a search. * Fragment to show a list of [Account]s, as a result of a search.

View File

@ -1,13 +1,13 @@
package com.h.pixeldroid.fragments.feeds.uncachedFeeds.search package com.h.pixeldroid.posts.feeds.uncachedFeeds.search
import androidx.paging.ExperimentalPagingApi import androidx.paging.ExperimentalPagingApi
import androidx.paging.Pager import androidx.paging.Pager
import androidx.paging.PagingConfig import androidx.paging.PagingConfig
import androidx.paging.PagingData import androidx.paging.PagingData
import com.h.pixeldroid.api.PixelfedAPI import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.UncachedContentRepository import com.h.pixeldroid.posts.feeds.uncachedFeeds.UncachedContentRepository
import com.h.pixeldroid.objects.FeedContent import com.h.pixeldroid.utils.api.objects.FeedContent
import com.h.pixeldroid.objects.Results import com.h.pixeldroid.utils.api.objects.Results
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import javax.inject.Inject import javax.inject.Inject
@ -15,7 +15,7 @@ import javax.inject.Inject
* Repository class to perform searches * Repository class to perform searches
* *
* The type argument [T] and the [Results.SearchType][type] argument should always * The type argument [T] and the [Results.SearchType][type] argument should always
* be in agreement, e.g. if [T] is a [com.h.pixeldroid.objects.Account] then * be in agreement, e.g. if [T] is a [com.h.pixeldroid.utils.api.objects.Account] then
* [type] should be [Results.SearchType.accounts]. * [type] should be [Results.SearchType.accounts].
*/ */
class SearchContentRepository<T: FeedContent> @ExperimentalPagingApi class SearchContentRepository<T: FeedContent> @ExperimentalPagingApi

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.fragments.feeds.uncachedFeeds.search package com.h.pixeldroid.posts.feeds.uncachedFeeds.search
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.os.Bundle import android.os.Bundle
@ -12,12 +12,11 @@ import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.h.pixeldroid.R import com.h.pixeldroid.R
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.UncachedFeedFragment import com.h.pixeldroid.posts.feeds.uncachedFeeds.UncachedFeedFragment
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.FeedViewModel import com.h.pixeldroid.posts.feeds.uncachedFeeds.FeedViewModel
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.ViewModelFactory import com.h.pixeldroid.posts.feeds.uncachedFeeds.ViewModelFactory
import com.h.pixeldroid.objects.Account import com.h.pixeldroid.utils.api.objects.Results
import com.h.pixeldroid.objects.Results import com.h.pixeldroid.utils.api.objects.Tag
import com.h.pixeldroid.objects.Tag
import kotlinx.android.synthetic.main.fragment_tags.view.* import kotlinx.android.synthetic.main.fragment_tags.view.*
/** /**

View File

@ -1,9 +1,9 @@
package com.h.pixeldroid.fragments.feeds.uncachedFeeds.search package com.h.pixeldroid.posts.feeds.uncachedFeeds.search
import androidx.paging.PagingSource import androidx.paging.PagingSource
import com.h.pixeldroid.api.PixelfedAPI import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.objects.FeedContent import com.h.pixeldroid.utils.api.objects.FeedContent
import com.h.pixeldroid.objects.Results import com.h.pixeldroid.utils.api.objects.Results
import retrofit2.HttpException import retrofit2.HttpException
import java.io.IOException import java.io.IOException

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.fragments.feeds.uncachedFeeds.search package com.h.pixeldroid.posts.feeds.uncachedFeeds.search
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
@ -11,10 +11,10 @@ import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.h.pixeldroid.R import com.h.pixeldroid.R
import com.h.pixeldroid.fragments.StatusViewHolder import com.h.pixeldroid.posts.StatusViewHolder
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.* import com.h.pixeldroid.posts.feeds.uncachedFeeds.*
import com.h.pixeldroid.objects.Results import com.h.pixeldroid.utils.api.objects.Results
import com.h.pixeldroid.objects.Status import com.h.pixeldroid.utils.api.objects.Status
/** /**
* Fragment to show a list of [Status]es, as a result of a search. * Fragment to show a list of [Status]es, as a result of a search.

View File

@ -1,11 +1,13 @@
package com.h.pixeldroid package com.h.pixeldroid.profile
import android.os.Bundle import android.os.Bundle
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.accountLists.AccountListFragment import com.h.pixeldroid.R
import com.h.pixeldroid.objects.Account import com.h.pixeldroid.posts.feeds.uncachedFeeds.accountLists.AccountListFragment
import com.h.pixeldroid.objects.Account.Companion.ACCOUNT_ID_TAG import com.h.pixeldroid.utils.api.objects.Account
import com.h.pixeldroid.objects.Account.Companion.ACCOUNT_TAG import com.h.pixeldroid.utils.api.objects.Account.Companion.ACCOUNT_ID_TAG
import com.h.pixeldroid.objects.Account.Companion.FOLLOWERS_TAG import com.h.pixeldroid.utils.api.objects.Account.Companion.ACCOUNT_TAG
import com.h.pixeldroid.utils.api.objects.Account.Companion.FOLLOWERS_TAG
import com.h.pixeldroid.utils.BaseActivity
class FollowsActivity : BaseActivity() { class FollowsActivity : BaseActivity() {

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid package com.h.pixeldroid.profile
import android.content.Intent import android.content.Intent
import android.graphics.Typeface import android.graphics.Typeface
@ -13,13 +13,15 @@ import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.h.pixeldroid.R
import com.h.pixeldroid.adapters.ProfilePostsRecyclerViewAdapter import com.h.pixeldroid.adapters.ProfilePostsRecyclerViewAdapter
import com.h.pixeldroid.api.PixelfedAPI import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.db.entities.UserDatabaseEntity import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.objects.Account import com.h.pixeldroid.utils.api.objects.Account
import com.h.pixeldroid.objects.Relationship import com.h.pixeldroid.utils.api.objects.Relationship
import com.h.pixeldroid.objects.Status import com.h.pixeldroid.utils.api.objects.Status
import com.h.pixeldroid.utils.HtmlUtils.Companion.parseHTMLText import com.h.pixeldroid.posts.parseHTMLText
import com.h.pixeldroid.utils.BaseActivity
import com.h.pixeldroid.utils.ImageConverter import com.h.pixeldroid.utils.ImageConverter
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback

View File

@ -7,9 +7,9 @@ import android.view.ViewGroup
import android.widget.ImageView import android.widget.ImageView
import androidx.appcompat.content.res.AppCompatResources.getDrawable import androidx.appcompat.content.res.AppCompatResources.getDrawable
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.h.pixeldroid.PostActivity import com.h.pixeldroid.posts.PostActivity
import com.h.pixeldroid.R import com.h.pixeldroid.R
import com.h.pixeldroid.objects.Status import com.h.pixeldroid.utils.api.objects.Status
import com.h.pixeldroid.utils.ImageConverter.Companion.setSquareImageFromDrawable import com.h.pixeldroid.utils.ImageConverter.Companion.setSquareImageFromDrawable
import com.h.pixeldroid.utils.ImageConverter.Companion.setSquareImageFromURL import com.h.pixeldroid.utils.ImageConverter.Companion.setSquareImageFromURL

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid package com.h.pixeldroid.searchDiscover
import android.app.SearchManager import android.app.SearchManager
import android.content.Intent import android.content.Intent
@ -8,10 +8,12 @@ import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator import com.google.android.material.tabs.TabLayoutMediator
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.search.SearchAccountFragment import com.h.pixeldroid.R
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.search.SearchHashtagFragment import com.h.pixeldroid.posts.feeds.uncachedFeeds.search.SearchAccountFragment
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.search.SearchPostsFragment import com.h.pixeldroid.posts.feeds.uncachedFeeds.search.SearchHashtagFragment
import com.h.pixeldroid.objects.Results import com.h.pixeldroid.posts.feeds.uncachedFeeds.search.SearchPostsFragment
import com.h.pixeldroid.utils.api.objects.Results
import com.h.pixeldroid.utils.BaseActivity
class SearchActivity : BaseActivity() { class SearchActivity : BaseActivity() {

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.fragments package com.h.pixeldroid.searchDiscover
import android.app.SearchManager import android.app.SearchManager
import android.content.Context import android.content.Context
@ -12,20 +12,17 @@ import android.widget.*
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.constraintlayout.motion.widget.MotionLayout import androidx.constraintlayout.motion.widget.MotionLayout
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.h.pixeldroid.Pixeldroid
import com.h.pixeldroid.PostActivity
import com.h.pixeldroid.R import com.h.pixeldroid.R
import com.h.pixeldroid.adapters.ProfilePostViewHolder import com.h.pixeldroid.adapters.ProfilePostViewHolder
import com.h.pixeldroid.api.PixelfedAPI import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.utils.api.objects.DiscoverPost
import com.h.pixeldroid.di.PixelfedAPIHolder import com.h.pixeldroid.utils.api.objects.DiscoverPosts
import com.h.pixeldroid.objects.DiscoverPost import com.h.pixeldroid.utils.api.objects.Status
import com.h.pixeldroid.objects.DiscoverPosts import com.h.pixeldroid.posts.PostActivity
import com.h.pixeldroid.objects.Status import com.h.pixeldroid.utils.BaseFragment
import com.h.pixeldroid.utils.ImageConverter import com.h.pixeldroid.utils.ImageConverter
import com.mikepenz.iconics.IconicsColor import com.mikepenz.iconics.IconicsColor
import com.mikepenz.iconics.IconicsDrawable import com.mikepenz.iconics.IconicsDrawable
@ -33,11 +30,9 @@ import com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial
import com.mikepenz.iconics.utils.color import com.mikepenz.iconics.utils.color
import com.mikepenz.iconics.utils.paddingDp import com.mikepenz.iconics.utils.paddingDp
import com.mikepenz.iconics.utils.sizeDp import com.mikepenz.iconics.utils.sizeDp
import kotlinx.android.synthetic.main.fragment_search.*
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback
import retrofit2.Response import retrofit2.Response
import javax.inject.Inject
/** /**
* This fragment lets you search and use Pixelfed's Discover feature * This fragment lets you search and use Pixelfed's Discover feature

View File

@ -1,7 +1,10 @@
package com.h.pixeldroid package com.h.pixeldroid.settings
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import com.h.pixeldroid.BuildConfig
import com.h.pixeldroid.R
import com.h.pixeldroid.utils.BaseActivity
import kotlinx.android.synthetic.main.activity_about.* import kotlinx.android.synthetic.main.activity_about.*
class AboutActivity : BaseActivity() { class AboutActivity : BaseActivity() {

View File

@ -1,6 +1,8 @@
package com.h.pixeldroid package com.h.pixeldroid.settings
import android.os.Bundle import android.os.Bundle
import com.h.pixeldroid.R
import com.h.pixeldroid.utils.BaseActivity
import kotlinx.android.synthetic.main.activity_licenses.* import kotlinx.android.synthetic.main.activity_licenses.*

View File

@ -1,11 +1,14 @@
package com.h.pixeldroid package com.h.pixeldroid.settings
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
import android.os.Bundle import android.os.Bundle
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.h.pixeldroid.utils.ThemeUtils.Companion.setThemeFromPreferences import com.h.pixeldroid.MainActivity
import com.h.pixeldroid.R
import com.h.pixeldroid.utils.BaseActivity
import com.h.pixeldroid.utils.setThemeFromPreferences
class SettingsActivity : BaseActivity(), SharedPreferences.OnSharedPreferenceChangeListener { class SettingsActivity : BaseActivity(), SharedPreferences.OnSharedPreferenceChangeListener {
private var restartMainOnExit = false private var restartMainOnExit = false

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid package com.h.pixeldroid.utils
import android.content.Context import android.content.Context
import android.content.res.Configuration import android.content.res.Configuration
@ -7,8 +7,8 @@ import android.os.Build
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.di.PixelfedAPIHolder import com.h.pixeldroid.utils.di.PixelfedAPIHolder
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
@ -21,7 +21,7 @@ open class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
(this.application as Pixeldroid).getAppComponent().inject(this) (this.application as PixelDroidApplication).getAppComponent().inject(this)
} }
override fun attachBaseContext(base: Context) { override fun attachBaseContext(base: Context) {

View File

@ -1,10 +1,9 @@
package com.h.pixeldroid.fragments package com.h.pixeldroid.utils
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.h.pixeldroid.Pixeldroid import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.utils.di.PixelfedAPIHolder
import com.h.pixeldroid.di.PixelfedAPIHolder
import javax.inject.Inject import javax.inject.Inject
/** /**
@ -20,7 +19,7 @@ open class BaseFragment: Fragment() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
(requireActivity().application as Pixeldroid).getAppComponent().inject(this) (requireActivity().application as PixelDroidApplication).getAppComponent().inject(this)
} }
} }

View File

@ -1,53 +0,0 @@
package com.h.pixeldroid.utils
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity
import com.h.pixeldroid.objects.Account
import com.h.pixeldroid.objects.Instance
import com.h.pixeldroid.utils.Utils.Companion.normalizeDomain
class DBUtils {
companion object {
private const val MAX_NUMBER_OF_STORED_POSTS = 200
private fun normalizeOrNot(uri: String): String{
return if(uri.startsWith("http://localhost")){
uri
} else {
normalizeDomain(uri)
}
}
fun addUser(db: AppDatabase, account: Account, instance_uri: String, activeUser: Boolean = true,
accessToken: String, refreshToken: String?, clientId: String, clientSecret: String) {
db.userDao().insertUser(
UserDatabaseEntity(
user_id = account.id!!,
//make sure not to normalize to https when localhost, to allow testing
instance_uri = normalizeOrNot(instance_uri),
username = account.username!!,
display_name = account.getDisplayName(),
avatar_static = account.avatar_static.orEmpty(),
isActive = activeUser,
accessToken = accessToken,
refreshToken = refreshToken,
clientId = clientId,
clientSecret = clientSecret
)
)
}
fun storeInstance(db: AppDatabase, instance: Instance) {
val maxTootChars = instance.max_toot_chars?.toInt() ?: Instance.DEFAULT_MAX_TOOT_CHARS
val dbInstance = InstanceDatabaseEntity(
//make sure not to normalize to https when localhost, to allow testing
uri = normalizeOrNot(instance.uri.orEmpty()),
title = instance.title.orEmpty(),
max_toot_chars = maxTootChars,
thumbnail = instance.thumbnail.orEmpty()
)
db.instanceDao().insertInstance(dbInstance)
}
}
}

View File

@ -1,126 +0,0 @@
package com.h.pixeldroid.utils
import android.content.Context
import android.os.Build
import android.text.Html
import android.text.SpannableStringBuilder
import android.text.Spanned
import android.text.style.ClickableSpan
import android.text.style.URLSpan
import android.util.Log
import android.view.View
import android.widget.Toast
import androidx.core.text.toSpanned
import com.h.pixeldroid.api.PixelfedAPI
import com.h.pixeldroid.objects.Account.Companion.getAccountFromId
import com.h.pixeldroid.objects.Mention
import com.h.pixeldroid.utils.customSpans.ClickableSpanNoUnderline
import java.net.URI
import java.net.URISyntaxException
import java.util.Locale
class HtmlUtils {
companion object {
fun fromHtml(html: String): Spanned {
val result: Spanned = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY)
} else {
Html.fromHtml(html)
}
return result.trim().toSpanned()
}
fun getDomain(urlString: String?): String {
val uri: URI
try {
uri = URI(urlString!!)
} catch (e: URISyntaxException) {
return ""
}
val host: String = uri.host
return if (host.startsWith("www.")) {
host.substring(4)
} else {
host
}
}
fun parseHTMLText(
text : String,
mentions: List<Mention>?,
api : PixelfedAPI,
context: Context,
credential: String
) : Spanned {
//Convert text to spannable
val content = fromHtml(text)
//Retrive all links that should be made clickable
val builder = SpannableStringBuilder(content)
val urlSpans = content.getSpans(0, content.length, URLSpan::class.java)
for(span in urlSpans) {
val start = builder.getSpanStart(span)
val end = builder.getSpanEnd(span)
val flags = builder.getSpanFlags(span)
val text = builder.subSequence(start, end)
var customSpan: ClickableSpan? = null
//Handle hashtags
if (text[0] == '#') {
val tag = text.subSequence(1, text.length).toString()
customSpan = object : ClickableSpanNoUnderline() {
override fun onClick(widget: View) {
Toast.makeText(context, tag, Toast.LENGTH_SHORT).show()
}
}
}
//Handle mentions
if(text[0] == '@' && !mentions.isNullOrEmpty()) {
val accountUsername = text.subSequence(1, text.length).toString()
var id: String? = null
//Go through all mentions stored in the status
for (mention in mentions) {
if (mention.username.toLowerCase(Locale.ROOT)
== accountUsername.toLowerCase(Locale.ROOT)
) {
id = mention.id
//Mentions can be of users in other domains
if (mention.url.contains(getDomain(span.url))) {
break
}
}
}
//Check that we found a user for the given mention
if (id != null) {
val accountId: String = id
customSpan = object : ClickableSpanNoUnderline() {
override fun onClick(widget: View) {
Log.e("MENTION", "CLICKED")
//Retrieve the account for the given profile
getAccountFromId(accountId, api, context, credential)
}
}
}
}
builder.removeSpan(span)
builder.setSpan(customSpan, start, end, flags)
// Add zero-width space after links in end of line to fix its too large hitbox.
if (end >= builder.length || builder.subSequence(end, end + 1).toString() == "\n") {
builder.insert(end, "\u200B")
}
}
return builder
}
}
}

View File

@ -9,7 +9,6 @@ import androidx.fragment.app.FragmentActivity
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.RequestOptions
import com.h.pixeldroid.R import com.h.pixeldroid.R
import java.io.File
class ImageConverter { class ImageConverter {
companion object { companion object {

View File

@ -1,14 +1,13 @@
package com.h.pixeldroid package com.h.pixeldroid.utils
import android.app.Application import android.app.Application
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.h.pixeldroid.di.* import com.h.pixeldroid.utils.di.*
import com.h.pixeldroid.utils.ThemeUtils
import com.mikepenz.iconics.Iconics import com.mikepenz.iconics.Iconics
import org.ligi.tracedroid.TraceDroid import org.ligi.tracedroid.TraceDroid
class Pixeldroid: Application() { class PixelDroidApplication: Application() {
private lateinit var mApplicationComponent: ApplicationComponent private lateinit var mApplicationComponent: ApplicationComponent
@ -17,7 +16,7 @@ class Pixeldroid: Application() {
TraceDroid.init(this) TraceDroid.init(this)
val sharedPreferences = val sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(this) PreferenceManager.getDefaultSharedPreferences(this)
ThemeUtils.setThemeFromPreferences(sharedPreferences, resources) setThemeFromPreferences(sharedPreferences, resources)
mApplicationComponent = DaggerApplicationComponent mApplicationComponent = DaggerApplicationComponent
.builder() .builder()
.applicationModule(ApplicationModule(this)) .applicationModule(ApplicationModule(this))

View File

@ -1,17 +0,0 @@
package com.h.pixeldroid.utils
import android.graphics.ColorMatrix
abstract class PostUtils {
companion object {
fun censorColorMatrix(): ColorMatrix {
val array: FloatArray = floatArrayOf( 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 1f, 0f )
return ColorMatrix(array)
}
fun uncensorColorMatrix(): ColorMatrix {
return ColorMatrix()
}
}
}

View File

@ -1,38 +0,0 @@
package com.h.pixeldroid.utils
import android.content.SharedPreferences
import android.content.res.Resources
import android.os.Build
import android.util.Log
import androidx.appcompat.app.AppCompatDelegate
import com.h.pixeldroid.R
class ThemeUtils {
companion object {
/**
* @brief Updates the application's theme depending on the given preferences and resources
*/
fun setThemeFromPreferences(preferences: SharedPreferences, resources : Resources) {
val themes = resources.getStringArray(R.array.theme_values)
val theme = preferences.getString("theme", "")
//Set the theme
when(theme) {
//Light
themes[1] -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
}
//Dark
themes[2] -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
}
else -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY)
}
}
}
}
}
}

View File

@ -1,43 +1,47 @@
package com.h.pixeldroid.utils package com.h.pixeldroid.utils
import android.content.Context import android.content.Context
import android.content.SharedPreferences
import android.content.res.Resources
import android.net.ConnectivityManager import android.net.ConnectivityManager
import android.widget.TextView import android.os.Build
import androidx.appcompat.app.AppCompatDelegate
import com.h.pixeldroid.R import com.h.pixeldroid.R
import java.text.ParseException
import java.util.Date
class Utils { fun hasInternet(context: Context): Boolean {
companion object { val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
fun hasInternet(context: Context): Boolean { return cm.activeNetwork != null
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager }
return cm.activeNetwork != null
fun normalizeDomain(domain: String): String {
return "https://" + domain
.replace("http://", "")
.replace("https://", "")
.trim(Char::isWhitespace)
}
/**
* @brief Updates the application's theme depending on the given preferences and resources
*/
fun setThemeFromPreferences(preferences: SharedPreferences, resources : Resources) {
val themes = resources.getStringArray(R.array.theme_values)
//Set the theme
when(preferences.getString("theme", "")) {
//Light
themes[1] -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
} }
//Dark
fun normalizeDomain(domain: String): String { themes[2] -> {
return "https://" + domain AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
.replace("http://", "")
.replace("https://", "")
.trim(Char::isWhitespace)
} }
else -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
fun setTextViewFromISO8601(date: Date, textView: TextView, absoluteTime: Boolean, context: Context) { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
val now = Date().time } else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY)
try {
val then = date.time
val formattedDate = android.text.format.DateUtils
.getRelativeTimeSpanString(then, now,
android.text.format.DateUtils.SECOND_IN_MILLIS,
android.text.format.DateUtils.FORMAT_ABBREV_RELATIVE)
textView.text = if(absoluteTime) context.getString(R.string.posted_on).format(date)
else "$formattedDate"
} catch (e: ParseException) {
e.printStackTrace()
} }
} }
} }
} }

View File

@ -1,6 +1,6 @@
package com.h.pixeldroid.api package com.h.pixeldroid.utils.api
import com.h.pixeldroid.objects.* import com.h.pixeldroid.utils.api.objects.*
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.Single import io.reactivex.Single
import okhttp3.MultipartBody import okhttp3.MultipartBody
@ -249,10 +249,10 @@ interface PixelfedAPI {
): Call<Account> ): Call<Account>
@GET("/api/v1/statuses/{id}") @GET("/api/v1/statuses/{id}")
fun getStatus( suspend fun getStatus(
@Header("Authorization") authorization: String, @Header("Authorization") authorization: String,
@Path("id") accountId : String @Path("id") accountId : String
): Call<Status> ): Status
@Multipart @Multipart
@POST("/api/v1/media") @POST("/api/v1/media")

View File

@ -1,11 +1,11 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.util.Log import android.util.Log
import androidx.core.content.ContextCompat.startActivity import androidx.core.content.ContextCompat.startActivity
import com.h.pixeldroid.ProfileActivity import com.h.pixeldroid.profile.ProfileActivity
import com.h.pixeldroid.api.PixelfedAPI import com.h.pixeldroid.utils.api.PixelfedAPI
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback
import retrofit2.Response import retrofit2.Response

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import java.io.Serializable import java.io.Serializable

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import java.io.Serializable import java.io.Serializable

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import java.io.Serializable import java.io.Serializable

View File

@ -0,0 +1,8 @@
package com.h.pixeldroid.utils.api.objects
import java.io.Serializable
data class Context(
val ancestors : List<Status>,
val descendants : List<Status>
) : Serializable

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import java.io.Serializable import java.io.Serializable

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import java.io.Serializable import java.io.Serializable

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import java.io.Serializable import java.io.Serializable

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
interface FeedContent { interface FeedContent {
val id: String? val id: String?

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import java.io.Serializable import java.io.Serializable

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
data class History( data class History(
//Required attributes //Required attributes

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
data class Instance ( data class Instance (
val description: String?, val description: String?,

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import java.io.Serializable import java.io.Serializable

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
/* /*
See https://nodeinfo.diaspora.software/schema.html and https://pixelfed.social/api/nodeinfo/2.0.json See https://nodeinfo.diaspora.software/schema.html and https://pixelfed.social/api/nodeinfo/2.0.json

View File

@ -1,9 +1,9 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import androidx.room.Entity import androidx.room.Entity
import androidx.room.ForeignKey import androidx.room.ForeignKey
import androidx.room.Index import androidx.room.Index
import com.h.pixeldroid.db.entities.UserDatabaseEntity import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import java.io.Serializable import java.io.Serializable
import java.util.Date import java.util.Date
@ -26,9 +26,9 @@ https://docs.joinmastodon.org/entities/notification/
data class Notification( data class Notification(
//Required attributes //Required attributes
override val id: String, override val id: String,
val type: NotificationType, val type: NotificationType?,
val created_at: Date, //ISO 8601 Datetime val created_at: Date?, //ISO 8601 Datetime
val account: Account, val account: Account?,
//Optional attributes //Optional attributes
val status: Status? = null, val status: Status? = null,

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import java.io.Serializable import java.io.Serializable

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import java.io.Serializable import java.io.Serializable

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import java.io.Serializable import java.io.Serializable

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import java.io.Serializable import java.io.Serializable

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import java.io.Serializable import java.io.Serializable

View File

@ -1,9 +1,10 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import android.app.DownloadManager import android.app.DownloadManager
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.database.Cursor import android.database.Cursor
import android.graphics.ColorMatrix
import android.graphics.ColorMatrixColorFilter import android.graphics.ColorMatrixColorFilter
import android.net.Uri import android.net.Uri
import android.os.Environment import android.os.Environment
@ -14,17 +15,11 @@ import android.view.View.VISIBLE
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Index
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import com.h.pixeldroid.R import com.h.pixeldroid.R
import com.h.pixeldroid.api.PixelfedAPI import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.db.entities.UserDatabaseEntity import com.h.pixeldroid.posts.getDomain
import com.h.pixeldroid.utils.HtmlUtils.Companion.getDomain import com.h.pixeldroid.posts.parseHTMLText
import com.h.pixeldroid.utils.HtmlUtils.Companion.parseHTMLText
import com.h.pixeldroid.utils.PostUtils.Companion.censorColorMatrix
import com.h.pixeldroid.utils.PostUtils.Companion.uncensorColorMatrix
import kotlinx.android.synthetic.main.post_fragment.view.* import kotlinx.android.synthetic.main.post_fragment.view.*
import java.io.File import java.io.File
import java.io.Serializable import java.io.Serializable
@ -107,11 +102,13 @@ open class Status(
// Set dark layout and warning message // Set dark layout and warning message
view.sensitiveWarning.visibility = VISIBLE view.sensitiveWarning.visibility = VISIBLE
view.postPicture.colorFilter = ColorMatrixColorFilter(censorColorMatrix()) val array = floatArrayOf(0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 1f, 0f)
val censorMatrix = ColorMatrix(array)
view.postPicture.colorFilter = ColorMatrixColorFilter(censorMatrix)
fun uncensorPicture(view: View) { fun uncensorPicture(view: View) {
view.sensitiveWarning.visibility = GONE view.sensitiveWarning.visibility = GONE
view.postPicture.colorFilter = ColorMatrixColorFilter(uncensorColorMatrix()) view.postPicture.clearColorFilter()
} }

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
import java.io.Serializable import java.io.Serializable

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects package com.h.pixeldroid.utils.api.objects
data class Token( data class Token(
val access_token: String?, val access_token: String?,

View File

@ -1,17 +1,17 @@
package com.h.pixeldroid.db package com.h.pixeldroid.utils.db
import androidx.room.Database import androidx.room.Database
import androidx.room.RoomDatabase import androidx.room.RoomDatabase
import androidx.room.TypeConverters import androidx.room.TypeConverters
import com.h.pixeldroid.db.dao.* import com.h.pixeldroid.utils.db.dao.*
import com.h.pixeldroid.db.dao.feedContent.NotificationDao import com.h.pixeldroid.utils.db.dao.feedContent.NotificationDao
import com.h.pixeldroid.db.dao.feedContent.posts.HomePostDao import com.h.pixeldroid.utils.db.dao.feedContent.posts.HomePostDao
import com.h.pixeldroid.db.dao.feedContent.posts.PublicPostDao import com.h.pixeldroid.utils.db.dao.feedContent.posts.PublicPostDao
import com.h.pixeldroid.db.entities.HomeStatusDatabaseEntity import com.h.pixeldroid.utils.db.entities.HomeStatusDatabaseEntity
import com.h.pixeldroid.db.entities.InstanceDatabaseEntity import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.db.entities.PublicFeedStatusDatabaseEntity import com.h.pixeldroid.utils.db.entities.PublicFeedStatusDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.objects.Notification import com.h.pixeldroid.utils.api.objects.Notification
@Database(entities = [ @Database(entities = [
InstanceDatabaseEntity::class, InstanceDatabaseEntity::class,

View File

@ -1,9 +1,9 @@
package com.h.pixeldroid.db package com.h.pixeldroid.utils.db
import androidx.room.TypeConverter import androidx.room.TypeConverter
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.reflect.TypeToken import com.google.gson.reflect.TypeToken
import com.h.pixeldroid.objects.* import com.h.pixeldroid.utils.api.objects.*
import java.util.* import java.util.*
class Converters { class Converters {

View File

@ -0,0 +1,46 @@
package com.h.pixeldroid.utils.db
import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.utils.api.objects.Account
import com.h.pixeldroid.utils.api.objects.Instance
import com.h.pixeldroid.utils.normalizeDomain
private fun normalizeOrNot(uri: String): String{
return if(uri.startsWith("http://localhost")){
uri
} else {
normalizeDomain(uri)
}
}
fun addUser(db: AppDatabase, account: Account, instance_uri: String, activeUser: Boolean = true,
accessToken: String, refreshToken: String?, clientId: String, clientSecret: String) {
db.userDao().insertUser(
UserDatabaseEntity(
user_id = account.id!!,
//make sure not to normalize to https when localhost, to allow testing
instance_uri = normalizeOrNot(instance_uri),
username = account.username!!,
display_name = account.getDisplayName(),
avatar_static = account.avatar_static.orEmpty(),
isActive = activeUser,
accessToken = accessToken,
refreshToken = refreshToken,
clientId = clientId,
clientSecret = clientSecret
)
)
}
fun storeInstance(db: AppDatabase, instance: Instance) {
val maxTootChars = instance.max_toot_chars?.toInt() ?: Instance.DEFAULT_MAX_TOOT_CHARS
val dbInstance = InstanceDatabaseEntity(
//make sure not to normalize to https when localhost, to allow testing
uri = normalizeOrNot(instance.uri.orEmpty()),
title = instance.title.orEmpty(),
max_toot_chars = maxTootChars,
thumbnail = instance.thumbnail.orEmpty()
)
db.instanceDao().insertInstance(dbInstance)
}

Some files were not shown because too many files have changed in this diff Show More