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"
minSdkVersion 23
targetSdkVersion 30
versionCode 7
versionName "1.0.alpha6"
versionCode 8
versionName "1.0.alpha7"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
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.matcher.IntentMatchers
import androidx.test.rule.GrantPermissionRule
import com.h.pixeldroid.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity
import com.h.pixeldroid.fragments.CameraFragment
import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.postCreation.camera.CameraFragment
import com.h.pixeldroid.testUtility.clearData
import com.h.pixeldroid.testUtility.initDB
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.platform.app.InstrumentationRegistry.getInstrumentation
import androidx.test.uiautomator.UiDevice
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity
import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.testUtility.MockServer
import com.h.pixeldroid.testUtility.clearData
import com.h.pixeldroid.testUtility.initDB

View File

@ -23,6 +23,7 @@ import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.GrantPermissionRule
import com.google.android.material.tabs.TabLayout
import com.h.pixeldroid.adapters.ThumbnailAdapter
import com.h.pixeldroid.settings.AboutActivity
import com.h.pixeldroid.testUtility.CustomMatchers
import com.h.pixeldroid.testUtility.clearData
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.ext.junit.runners.AndroidJUnit4
import com.google.android.material.tabs.TabLayout
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity
import com.h.pixeldroid.fragments.StatusViewHolder
import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.posts.StatusViewHolder
import com.h.pixeldroid.testUtility.CustomMatchers.Companion.atPosition
import com.h.pixeldroid.testUtility.CustomMatchers.Companion.clickChildViewWithId
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.ext.junit.runners.AndroidJUnit4
import androidx.test.rule.ActivityTestRule
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity
import com.h.pixeldroid.fragments.StatusViewHolder
import com.h.pixeldroid.objects.Account
import com.h.pixeldroid.objects.Account.Companion.ACCOUNT_TAG
import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.posts.StatusViewHolder
import com.h.pixeldroid.utils.api.objects.Account
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.clearData
import com.h.pixeldroid.testUtility.initDB

View File

@ -1,27 +1,5 @@
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)
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.withId
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity
import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.testUtility.MockServer
import com.h.pixeldroid.testUtility.clearData
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.platform.app.InstrumentationRegistry
import androidx.test.rule.GrantPermissionRule
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity
import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.testUtility.MockServer
import com.h.pixeldroid.testUtility.clearData
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.platform.app.InstrumentationRegistry
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
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.*
import com.h.pixeldroid.posts.PostActivity
import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
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.clearData
import com.h.pixeldroid.testUtility.initDB

View File

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

View File

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

View File

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

View File

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

View File

@ -16,16 +16,19 @@ import androidx.paging.ExperimentalPagingApi
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.bumptech.glide.Glide
import com.google.android.material.tabs.TabLayoutMediator
import com.h.pixeldroid.db.entities.HomeStatusDatabaseEntity
import com.h.pixeldroid.db.entities.PublicFeedStatusDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity
import com.h.pixeldroid.fragments.CameraFragment
import com.h.pixeldroid.fragments.SearchDiscoverFragment
import com.h.pixeldroid.fragments.feeds.cachedFeeds.notifications.NotificationsFragment
import com.h.pixeldroid.fragments.feeds.cachedFeeds.postFeeds.PostFeedFragment
import com.h.pixeldroid.objects.Account
import com.h.pixeldroid.utils.DBUtils
import com.h.pixeldroid.utils.Utils.Companion.hasInternet
import com.h.pixeldroid.utils.db.addUser
import com.h.pixeldroid.postCreation.camera.CameraFragment
import com.h.pixeldroid.utils.db.entities.HomeStatusDatabaseEntity
import com.h.pixeldroid.utils.db.entities.PublicFeedStatusDatabaseEntity
import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.posts.feeds.cachedFeeds.notifications.NotificationsFragment
import com.h.pixeldroid.posts.feeds.cachedFeeds.postFeeds.PostFeedFragment
import com.h.pixeldroid.utils.api.objects.Account
import com.h.pixeldroid.profile.ProfileActivity
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.materialdrawer.iconics.iconicsIcon
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem
@ -193,7 +196,7 @@ class MainActivity : BaseActivity() {
) {
if (response.body() != null && response.isSuccessful) {
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!!)
}
}

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

View File

@ -1,7 +1,8 @@
package com.h.pixeldroid
package com.h.pixeldroid.postCreation.camera
import android.os.Bundle
import com.h.pixeldroid.fragments.CameraFragment
import com.h.pixeldroid.utils.BaseActivity
import com.h.pixeldroid.R
class CameraActivity : BaseActivity() {
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.app.Activity
@ -31,8 +31,8 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions
import com.h.pixeldroid.PostCreationActivity
import com.h.pixeldroid.R
import com.h.pixeldroid.postCreation.PostCreationActivity
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
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 androidx.fragment.app.Fragment
@ -7,11 +7,10 @@ import android.view.View
import android.view.ViewGroup
import android.widget.SeekBar
import com.h.pixeldroid.R
import com.h.pixeldroid.interfaces.EditImageFragmentListener
class EditImageFragment : Fragment(), SeekBar.OnSeekBarChangeListener {
private var listener: EditImageFragmentListener? = null
private var listener: PhotoEditActivity? = null
private lateinit var seekbarBrightness: SeekBar
private lateinit var seekbarSaturation: SeekBar
@ -86,7 +85,7 @@ class EditImageFragment : Fragment(), SeekBar.OnSeekBarChangeListener {
listener!!.onEditCompleted()
}
fun setListener(listener: EditImageFragmentListener) {
fun setListener(listener: PhotoEditActivity) {
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.FragmentManager
@ -19,7 +19,7 @@ class EditPhotoViewPagerAdapter (manager: FragmentManager):
fragmentTitleList.add(title)
}
override fun getPageTitle(position: Int): CharSequence? {
override fun getPageTitle(position: Int): CharSequence {
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.ImageDecoder
import android.os.Build
import android.os.Bundle
import android.provider.MediaStore
import android.util.Log
import android.util.TypedValue
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.graphics.decodeBitmap
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.DefaultItemAnimator
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.h.pixeldroid.PhotoEditActivity
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.imageprocessors.Filter
import com.zomato.photofilters.utils.ThumbnailItem
import com.zomato.photofilters.utils.ThumbnailsManager
class FilterListFragment : Fragment(), FilterListFragmentListener {
class FilterListFragment : Fragment() {
internal lateinit var recyclerView: RecyclerView
internal var listener : FilterListFragmentListener? = null
private lateinit var recyclerView: RecyclerView
private var listener : PhotoEditActivity? = null
internal lateinit var adapter: ThumbnailAdapter
internal lateinit var tbItemList: MutableList<ThumbnailItem>
private lateinit var tbItemList: MutableList<ThumbnailItem>
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
@ -107,13 +99,13 @@ class FilterListFragment : Fragment(), FilterListFragmentListener {
}
}
override fun onFilterSelected(filter: Filter) {
fun onFilterSelected(filter: Filter) {
if(listener != null ){
listener!!.onFilterSelected(filter)
}
}
fun setListener(listFragmentListener: FilterListFragmentListener) {
fun setListener(listFragmentListener: PhotoEditActivity) {
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.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.AlertDialog
@ -29,12 +29,9 @@ import com.bumptech.glide.Glide
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.snackbar.Snackbar
import com.google.android.material.tabs.TabLayout
import com.h.pixeldroid.adapters.EditPhotoViewPagerAdapter
import com.h.pixeldroid.fragments.EditImageFragment
import com.h.pixeldroid.fragments.FilterListFragment
import com.h.pixeldroid.interfaces.EditImageFragmentListener
import com.h.pixeldroid.interfaces.FilterListFragmentListener
import com.h.pixeldroid.utils.NonSwipeableViewPager
import com.h.pixeldroid.utils.BaseActivity
import com.h.pixeldroid.R
import com.h.pixeldroid.postCreation.PostCreationActivity
import com.yalantis.ucrop.UCrop
import com.zomato.photofilters.imageprocessors.Filter
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,
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 BRIGHTNESS_START = 0
private val SATURATION_START = 1.0f
@ -76,8 +73,8 @@ class PhotoEditActivity : BaseActivity(), FilterListFragmentListener, EditImageF
private lateinit var filterListFragment: FilterListFragment
private lateinit var editImageFragment: EditImageFragment
lateinit var viewPager: NonSwipeableViewPager
lateinit var tabLayout: TabLayout
private lateinit var viewPager: NonSwipeableViewPager
private lateinit var tabLayout: TabLayout
private var brightnessFinal = BRIGHTNESS_START
private var saturationFinal = SATURATION_START
@ -189,7 +186,7 @@ class PhotoEditActivity : BaseActivity(), FilterListFragmentListener, EditImageF
}
//</editor-fold>
override fun onFilterSelected(filter: Filter) {
fun onFilterSelected(filter: Filter) {
resetControls()
filteredImage = compressedOriginalImage!!.copy(BITMAP_CONFIG, true)
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
val myFilter = Filter()
myFilter.addEditFilters(brightness, saturationFinal, contrastFinal)
applyFilterAndShowImage(myFilter, filteredImage)
}
override fun onSaturationChange(saturation: Float) {
fun onSaturationChange(saturation: Float) {
saturationFinal = saturation
val myFilter = Filter()
myFilter.addEditFilters(brightnessFinal, saturation, contrastFinal)
applyFilterAndShowImage(myFilter, filteredImage)
}
override fun onContrastChange(contrast: Float) {
fun onContrastChange(contrast: Float) {
contrastFinal = contrast
val myFilter = Filter()
myFilter.addEditFilters(brightnessFinal, saturationFinal, contrast)
@ -247,10 +244,10 @@ class PhotoEditActivity : BaseActivity(), FilterListFragmentListener, EditImageF
return this
}
override fun onEditStarted() {
fun onEditStarted() {
}
override fun onEditCompleted() {
fun onEditCompleted() {
val myFilter = Filter()
myFilter.addEditFilters(brightnessFinal, saturationFinal, contrastFinal)
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.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.view.LayoutInflater
@ -9,13 +9,12 @@ import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.h.pixeldroid.R
import com.h.pixeldroid.interfaces.FilterListFragmentListener
import com.zomato.photofilters.utils.ThumbnailItem
import kotlinx.android.synthetic.main.thumbnail_list_item.view.*
class ThumbnailAdapter (private val context: Context,
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

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.utils.customSpans
package com.h.pixeldroid.posts
import android.text.TextPaint
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.util.Log
import android.view.View
import com.h.pixeldroid.fragments.PostFragment
import com.h.pixeldroid.objects.DiscoverPost
import com.h.pixeldroid.objects.Status
import com.h.pixeldroid.objects.Status.Companion.DISCOVER_TAG
import com.h.pixeldroid.objects.Status.Companion.DOMAIN_TAG
import com.h.pixeldroid.objects.Status.Companion.POST_TAG
import androidx.lifecycle.lifecycleScope
import com.h.pixeldroid.R
import com.h.pixeldroid.utils.api.objects.DiscoverPost
import com.h.pixeldroid.utils.api.objects.Status
import com.h.pixeldroid.utils.api.objects.Status.Companion.DISCOVER_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 retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.HttpException
import java.io.IOException
class PostActivity : BaseActivity() {
private lateinit var postFragment : PostFragment
@ -55,26 +56,24 @@ class PostActivity : BaseActivity() {
) {
val api = apiHolder.api ?: apiHolder.setDomainToCurrentUser(db)
val id = discoverPost.url?.substringAfterLast('/') ?: ""
api.getStatus("Bearer $accessToken", id).enqueue(object : Callback<Status> {
override fun onFailure(call: Call<Status>, t: Throwable) {
Log.e("PostActivity:", t.toString())
lifecycleScope.launchWhenCreated {
try {
val status = api.getStatus("Bearer $accessToken", id)
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?){
supportActionBar?.title = getString(R.string.post_title).format(status!!.account?.getDisplayName())
arguments.putSerializable(POST_TAG, status)
postFragment.arguments = arguments
supportFragmentManager.isStateSaved
supportFragmentManager.beginTransaction()
.add(R.id.postFragmentSingle, postFragment).commit()
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.view.LayoutInflater
@ -6,9 +6,10 @@ import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.lifecycleScope
import com.h.pixeldroid.R
import com.h.pixeldroid.objects.Status
import com.h.pixeldroid.objects.Status.Companion.DOMAIN_TAG
import com.h.pixeldroid.objects.Status.Companion.POST_TAG
import com.h.pixeldroid.utils.api.objects.Status
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.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.util.Log
import android.view.View
import com.h.pixeldroid.objects.Report
import com.h.pixeldroid.objects.Status
import com.h.pixeldroid.R
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 retrofit2.Call
import retrofit2.Callback

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.fragments
package com.h.pixeldroid.posts
import android.Manifest
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.tabs.TabLayoutMediator
import com.h.pixeldroid.R
import com.h.pixeldroid.ReportActivity
import com.h.pixeldroid.api.PixelfedAPI
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.objects.Attachment
import com.h.pixeldroid.objects.Context
import com.h.pixeldroid.objects.Status
import com.h.pixeldroid.utils.HtmlUtils
import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.utils.api.objects.Attachment
import com.h.pixeldroid.utils.api.objects.Context
import com.h.pixeldroid.utils.api.objects.Status
import com.h.pixeldroid.utils.ImageConverter
import com.h.pixeldroid.utils.Utils
import com.karumi.dexter.Dexter
import com.karumi.dexter.listener.PermissionDeniedResponse
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,
request: RequestBuilder<Drawable>,
//homeFragment: Fragment,
@ -128,7 +125,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
}
//Convert the date to a readable string
Utils.setTextViewFromISO8601(
setTextViewFromISO8601(
status?.created_at!!,
rootView.postDate,
isActivity,
@ -160,7 +157,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
rootView.findViewById<LinearLayout>(R.id.commentContainer).visibility = View.GONE
}
fun setupPostPics(
private fun setupPostPics(
rootView: View,
request: RequestBuilder<Drawable>,
//homeFragment: Fragment
@ -192,7 +189,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
}
}
fun setupTabsLayout(
private fun setupTabsLayout(
rootView: View,
request: RequestBuilder<Drawable>,
) {
@ -209,18 +206,18 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
}.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 {
if (status?.content.isNullOrBlank()) {
visibility = View.GONE
} 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()
}
}
}
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 credential = "Bearer ${user.accessToken}"
@ -246,7 +243,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
activateMoreButton(holder, api, db, lifecycleScope)
}
fun activateReblogger(
private fun activateReblogger(
holder: StatusViewHolder,
api: PixelfedAPI,
credential: String,
@ -271,7 +268,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
}
}
fun reblogPost(
private fun reblogPost(
holder : StatusViewHolder,
api: PixelfedAPI,
credential: String
@ -301,7 +298,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
}
}
fun undoReblogPost(
private fun undoReblogPost(
holder : StatusViewHolder,
api: PixelfedAPI,
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 {
PopupMenu(it.context, it).apply {
setOnMenuItemClickListener { item ->
@ -448,7 +445,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
}
fun activateDoubleTapLiker(
private fun activateDoubleTapLiker(
holder: StatusViewHolder,
api: PixelfedAPI,
credential: String
@ -481,7 +478,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
}
}
fun activateLiker(
private fun activateLiker(
holder: StatusViewHolder,
api: PixelfedAPI,
credential: String,
@ -507,7 +504,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
}
}
fun likePostCall(
private fun likePostCall(
holder : StatusViewHolder,
api: PixelfedAPI,
credential: String,
@ -537,7 +534,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
}
}
fun unLikePostCall(
private fun unLikePostCall(
holder : StatusViewHolder,
api: PixelfedAPI,
credential: String,
@ -568,7 +565,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
}
}
fun showComments(
private fun showComments(
holder: StatusViewHolder,
api: PixelfedAPI,
credential: String
@ -589,7 +586,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
}
}
fun activateCommenter(
private fun activateCommenter(
holder: StatusViewHolder,
api: PixelfedAPI,
credential: String
@ -615,7 +612,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
}
}
fun toggleCommentInput(
private fun toggleCommentInput(
holder : StatusViewHolder
) {
//Toggle comment button
@ -650,7 +647,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
view.commentText.text = commentContent
}
fun retrieveComments(
private fun retrieveComments(
holder : StatusViewHolder,
api: PixelfedAPI,
credential: String,
@ -686,7 +683,7 @@ class StatusViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
}
}
fun postComment(
private fun postComment(
holder : StatusViewHolder,
api: PixelfedAPI,
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.View
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.size
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.view.LayoutInflater
@ -17,11 +17,11 @@ import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.launch
import com.h.pixeldroid.databinding.FragmentFeedBinding
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.db.dao.feedContent.FeedContentDao
import com.h.pixeldroid.fragments.BaseFragment
import com.h.pixeldroid.fragments.feeds.initAdapter
import com.h.pixeldroid.objects.FeedContentDatabase
import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.utils.db.dao.feedContent.FeedContentDao
import com.h.pixeldroid.utils.BaseFragment
import com.h.pixeldroid.posts.feeds.initAdapter
import com.h.pixeldroid.utils.api.objects.FeedContentDatabase
/**

View File

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

View File

@ -14,12 +14,12 @@
* 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.viewModelScope
import androidx.paging.*
import com.h.pixeldroid.objects.FeedContentDatabase
import com.h.pixeldroid.utils.api.objects.FeedContentDatabase
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.Intent
@ -16,22 +16,22 @@ import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.h.pixeldroid.PostActivity
import com.h.pixeldroid.ProfileActivity
import com.h.pixeldroid.posts.PostActivity
import com.h.pixeldroid.profile.ProfileActivity
import com.h.pixeldroid.R
import com.h.pixeldroid.api.PixelfedAPI
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.di.PixelfedAPIHolder
import com.h.pixeldroid.objects.Account
import com.h.pixeldroid.objects.Notification
import com.h.pixeldroid.objects.Status
import com.h.pixeldroid.utils.Utils.Companion.setTextViewFromISO8601
import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.utils.di.PixelfedAPIHolder
import com.h.pixeldroid.utils.api.objects.Account
import com.h.pixeldroid.utils.api.objects.Notification
import com.h.pixeldroid.utils.api.objects.Status
import kotlinx.android.synthetic.main.fragment_notifications.view.*
import com.h.pixeldroid.fragments.feeds.cachedFeeds.CachedFeedFragment
import com.h.pixeldroid.fragments.feeds.cachedFeeds.FeedViewModel
import com.h.pixeldroid.fragments.feeds.cachedFeeds.ViewModelFactory
import com.h.pixeldroid.utils.HtmlUtils.Companion.parseHTMLText
import com.h.pixeldroid.posts.feeds.cachedFeeds.CachedFeedFragment
import com.h.pixeldroid.posts.feeds.cachedFeeds.FeedViewModel
import com.h.pixeldroid.posts.feeds.cachedFeeds.ViewModelFactory
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() {
val intent: Intent
val intent: Intent =
when (type){
Notification.NotificationType.mention, Notification.NotificationType.favourite,
Notification.NotificationType.poll, Notification.NotificationType.reblog -> {
intent = openPostFromNotification()
openPostFromNotification()
}
Notification.NotificationType.follow -> {
intent = Intent(itemView.context, ProfileActivity::class.java)
intent.putExtra(Account.ACCOUNT_TAG, account)
Intent(itemView.context, ProfileActivity::class.java).apply {
putExtra(Account.ACCOUNT_TAG, account)
}
}
null -> return //TODO show an error here?
}
itemView.context.startActivity(intent)
}
private fun Notification.openPostFromNotification(): Intent {
val intent = Intent(itemView.context, PostActivity::class.java)
intent.putExtra(Status.POST_TAG, status)
return intent
}
private fun Notification.openPostFromNotification(): Intent =
Intent(itemView.context, PostActivity::class.java).apply {
putExtra(Status.POST_TAG, status)
}
private fun setNotificationType(type: Notification.NotificationType, username: String,
private fun setNotificationType(type: Notification.NotificationType,
username: String,
textView: TextView
){
val context = textView.context
val (format: String, drawable: Drawable?) = when(type) {
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 -> {
setNotificationTypeTextView(context, R.string.mention_notification, R.drawable.ic_apenstaart)
getStringAndDrawable(context, R.string.mention_notification, R.drawable.ic_apenstaart)
}
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 -> {
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 -> {
setNotificationTypeTextView(context, R.string.poll_notification, R.drawable.poll)
getStringAndDrawable(context, R.string.poll_notification, R.drawable.poll)
}
}
textView.text = format.format(username)
@ -132,9 +134,9 @@ class NotificationViewHolder(view: View) : RecyclerView.ViewHolder(view) {
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
}
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) }
//Convert HTML to clickable text

View File

@ -14,13 +14,13 @@
* 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.room.withTransaction
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.di.PixelfedAPIHolder
import com.h.pixeldroid.objects.Notification
import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.utils.di.PixelfedAPIHolder
import com.h.pixeldroid.utils.api.objects.Notification
import retrofit2.HttpException
import java.io.IOException
import javax.inject.Inject
@ -57,7 +57,7 @@ class NotificationsRemoteMediator @Inject constructor(
try {
val user = db.userDao().getActiveUser()!!
val api = apiHolder.api ?: apiHolder.setDomainToCurrentUser(db)
val accessToken = user.accessToken.orEmpty()
val accessToken = user.accessToken
val apiResponse = api.notifications("Bearer $accessToken",
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.room.withTransaction
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.di.PixelfedAPIHolder
import com.h.pixeldroid.db.entities.HomeStatusDatabaseEntity
import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.utils.di.PixelfedAPIHolder
import com.h.pixeldroid.utils.db.entities.HomeStatusDatabaseEntity
import retrofit2.HttpException
import java.io.IOException
import javax.inject.Inject
@ -42,7 +42,7 @@ class HomeFeedRemoteMediator @Inject constructor(
try {
val user = db.userDao().getActiveUser()!!
val api = apiHolder.api ?: apiHolder.setDomainToCurrentUser(db)
val accessToken = user.accessToken.orEmpty()
val accessToken = user.accessToken
val apiResponse = api.timelineHome( "Bearer $accessToken",
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.view.LayoutInflater
@ -12,13 +12,13 @@ import androidx.paging.RemoteMediator
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.h.pixeldroid.R
import com.h.pixeldroid.db.dao.feedContent.FeedContentDao
import com.h.pixeldroid.fragments.StatusViewHolder
import com.h.pixeldroid.fragments.feeds.cachedFeeds.FeedViewModel
import com.h.pixeldroid.fragments.feeds.cachedFeeds.CachedFeedFragment
import com.h.pixeldroid.fragments.feeds.cachedFeeds.ViewModelFactory
import com.h.pixeldroid.objects.FeedContentDatabase
import com.h.pixeldroid.objects.Status
import com.h.pixeldroid.utils.db.dao.feedContent.FeedContentDao
import com.h.pixeldroid.posts.StatusViewHolder
import com.h.pixeldroid.posts.feeds.cachedFeeds.FeedViewModel
import com.h.pixeldroid.posts.feeds.cachedFeeds.CachedFeedFragment
import com.h.pixeldroid.posts.feeds.cachedFeeds.ViewModelFactory
import com.h.pixeldroid.utils.api.objects.FeedContentDatabase
import com.h.pixeldroid.utils.api.objects.Status
/**

View File

@ -14,13 +14,13 @@
* 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.room.withTransaction
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.db.entities.PublicFeedStatusDatabaseEntity
import com.h.pixeldroid.di.PixelfedAPIHolder
import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.utils.db.entities.PublicFeedStatusDatabaseEntity
import com.h.pixeldroid.utils.di.PixelfedAPIHolder
import retrofit2.HttpException
import java.io.IOException
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.viewModelScope
import androidx.paging.*
import com.h.pixeldroid.objects.FeedContent
import com.h.pixeldroid.utils.api.objects.FeedContent
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.view.LayoutInflater
@ -17,9 +17,9 @@ import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.launch
import com.h.pixeldroid.databinding.FragmentFeedBinding
import com.h.pixeldroid.fragments.BaseFragment
import com.h.pixeldroid.fragments.feeds.initAdapter
import com.h.pixeldroid.objects.FeedContent
import com.h.pixeldroid.utils.BaseFragment
import com.h.pixeldroid.posts.feeds.initAdapter
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.os.Bundle
@ -14,12 +14,12 @@ import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.h.pixeldroid.R
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.FeedViewModel
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.UncachedFeedFragment
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.ViewModelFactory
import com.h.pixeldroid.objects.Account
import com.h.pixeldroid.objects.Account.Companion.ACCOUNT_ID_TAG
import com.h.pixeldroid.objects.Account.Companion.FOLLOWERS_TAG
import com.h.pixeldroid.posts.feeds.uncachedFeeds.FeedViewModel
import com.h.pixeldroid.posts.feeds.uncachedFeeds.UncachedFeedFragment
import com.h.pixeldroid.posts.feeds.uncachedFeeds.ViewModelFactory
import com.h.pixeldroid.utils.api.objects.Account
import com.h.pixeldroid.utils.api.objects.Account.Companion.ACCOUNT_ID_TAG
import com.h.pixeldroid.utils.api.objects.Account.Companion.FOLLOWERS_TAG
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.Pager
import androidx.paging.PagingConfig
import androidx.paging.PagingData
import com.h.pixeldroid.api.PixelfedAPI
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.UncachedContentRepository
import com.h.pixeldroid.objects.Account
import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.posts.feeds.uncachedFeeds.UncachedContentRepository
import com.h.pixeldroid.utils.api.objects.Account
import kotlinx.coroutines.flow.Flow
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 com.h.pixeldroid.api.PixelfedAPI
import com.h.pixeldroid.objects.Account
import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.utils.api.objects.Account
import retrofit2.HttpException
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.view.LayoutInflater
@ -6,10 +6,10 @@ import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
import androidx.paging.ExperimentalPagingApi
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.*
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.accountLists.AccountAdapter
import com.h.pixeldroid.objects.Account
import com.h.pixeldroid.objects.Results
import com.h.pixeldroid.posts.feeds.uncachedFeeds.*
import com.h.pixeldroid.posts.feeds.uncachedFeeds.accountLists.AccountAdapter
import com.h.pixeldroid.utils.api.objects.Account
import com.h.pixeldroid.utils.api.objects.Results
/**
* 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.Pager
import androidx.paging.PagingConfig
import androidx.paging.PagingData
import com.h.pixeldroid.api.PixelfedAPI
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.UncachedContentRepository
import com.h.pixeldroid.objects.FeedContent
import com.h.pixeldroid.objects.Results
import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.posts.feeds.uncachedFeeds.UncachedContentRepository
import com.h.pixeldroid.utils.api.objects.FeedContent
import com.h.pixeldroid.utils.api.objects.Results
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject
@ -15,7 +15,7 @@ import javax.inject.Inject
* Repository class to perform searches
*
* 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].
*/
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.os.Bundle
@ -12,12 +12,11 @@ import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.h.pixeldroid.R
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.UncachedFeedFragment
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.FeedViewModel
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.ViewModelFactory
import com.h.pixeldroid.objects.Account
import com.h.pixeldroid.objects.Results
import com.h.pixeldroid.objects.Tag
import com.h.pixeldroid.posts.feeds.uncachedFeeds.UncachedFeedFragment
import com.h.pixeldroid.posts.feeds.uncachedFeeds.FeedViewModel
import com.h.pixeldroid.posts.feeds.uncachedFeeds.ViewModelFactory
import com.h.pixeldroid.utils.api.objects.Results
import com.h.pixeldroid.utils.api.objects.Tag
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 com.h.pixeldroid.api.PixelfedAPI
import com.h.pixeldroid.objects.FeedContent
import com.h.pixeldroid.objects.Results
import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.utils.api.objects.FeedContent
import com.h.pixeldroid.utils.api.objects.Results
import retrofit2.HttpException
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.view.LayoutInflater
@ -11,10 +11,10 @@ import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.h.pixeldroid.R
import com.h.pixeldroid.fragments.StatusViewHolder
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.*
import com.h.pixeldroid.objects.Results
import com.h.pixeldroid.objects.Status
import com.h.pixeldroid.posts.StatusViewHolder
import com.h.pixeldroid.posts.feeds.uncachedFeeds.*
import com.h.pixeldroid.utils.api.objects.Results
import com.h.pixeldroid.utils.api.objects.Status
/**
* 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 com.h.pixeldroid.fragments.feeds.uncachedFeeds.accountLists.AccountListFragment
import com.h.pixeldroid.objects.Account
import com.h.pixeldroid.objects.Account.Companion.ACCOUNT_ID_TAG
import com.h.pixeldroid.objects.Account.Companion.ACCOUNT_TAG
import com.h.pixeldroid.objects.Account.Companion.FOLLOWERS_TAG
import com.h.pixeldroid.R
import com.h.pixeldroid.posts.feeds.uncachedFeeds.accountLists.AccountListFragment
import com.h.pixeldroid.utils.api.objects.Account
import com.h.pixeldroid.utils.api.objects.Account.Companion.ACCOUNT_ID_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() {

View File

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

View File

@ -7,9 +7,9 @@ import android.view.ViewGroup
import android.widget.ImageView
import androidx.appcompat.content.res.AppCompatResources.getDrawable
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.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.setSquareImageFromURL

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid
package com.h.pixeldroid.searchDiscover
import android.app.SearchManager
import android.content.Intent
@ -8,10 +8,12 @@ import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.search.SearchAccountFragment
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.search.SearchHashtagFragment
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.search.SearchPostsFragment
import com.h.pixeldroid.objects.Results
import com.h.pixeldroid.R
import com.h.pixeldroid.posts.feeds.uncachedFeeds.search.SearchAccountFragment
import com.h.pixeldroid.posts.feeds.uncachedFeeds.search.SearchHashtagFragment
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() {

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.fragments
package com.h.pixeldroid.searchDiscover
import android.app.SearchManager
import android.content.Context
@ -12,20 +12,17 @@ import android.widget.*
import androidx.annotation.StringRes
import androidx.appcompat.widget.SearchView
import androidx.constraintlayout.motion.widget.MotionLayout
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.h.pixeldroid.Pixeldroid
import com.h.pixeldroid.PostActivity
import com.h.pixeldroid.R
import com.h.pixeldroid.adapters.ProfilePostViewHolder
import com.h.pixeldroid.api.PixelfedAPI
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.di.PixelfedAPIHolder
import com.h.pixeldroid.objects.DiscoverPost
import com.h.pixeldroid.objects.DiscoverPosts
import com.h.pixeldroid.objects.Status
import com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.utils.api.objects.DiscoverPost
import com.h.pixeldroid.utils.api.objects.DiscoverPosts
import com.h.pixeldroid.utils.api.objects.Status
import com.h.pixeldroid.posts.PostActivity
import com.h.pixeldroid.utils.BaseFragment
import com.h.pixeldroid.utils.ImageConverter
import com.mikepenz.iconics.IconicsColor
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.paddingDp
import com.mikepenz.iconics.utils.sizeDp
import kotlinx.android.synthetic.main.fragment_search.*
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import javax.inject.Inject
/**
* 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.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.*
class AboutActivity : BaseActivity() {

View File

@ -1,6 +1,8 @@
package com.h.pixeldroid
package com.h.pixeldroid.settings
import android.os.Bundle
import com.h.pixeldroid.R
import com.h.pixeldroid.utils.BaseActivity
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.SharedPreferences
import android.os.Bundle
import androidx.preference.PreferenceFragmentCompat
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 {
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.res.Configuration
@ -7,8 +7,8 @@ import android.os.Build
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.preference.PreferenceManager
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.di.PixelfedAPIHolder
import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.utils.di.PixelfedAPIHolder
import java.util.*
import javax.inject.Inject
@ -21,7 +21,7 @@ open class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
(this.application as Pixeldroid).getAppComponent().inject(this)
(this.application as PixelDroidApplication).getAppComponent().inject(this)
}
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 androidx.fragment.app.Fragment
import com.h.pixeldroid.Pixeldroid
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.di.PixelfedAPIHolder
import com.h.pixeldroid.utils.db.AppDatabase
import com.h.pixeldroid.utils.di.PixelfedAPIHolder
import javax.inject.Inject
/**
@ -20,7 +19,7 @@ open class BaseFragment: Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
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.request.RequestOptions
import com.h.pixeldroid.R
import java.io.File
class ImageConverter {
companion object {

View File

@ -1,14 +1,13 @@
package com.h.pixeldroid
package com.h.pixeldroid.utils
import android.app.Application
import androidx.preference.PreferenceManager
import com.h.pixeldroid.di.*
import com.h.pixeldroid.utils.ThemeUtils
import com.h.pixeldroid.utils.di.*
import com.mikepenz.iconics.Iconics
import org.ligi.tracedroid.TraceDroid
class Pixeldroid: Application() {
class PixelDroidApplication: Application() {
private lateinit var mApplicationComponent: ApplicationComponent
@ -17,7 +16,7 @@ class Pixeldroid: Application() {
TraceDroid.init(this)
val sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(this)
ThemeUtils.setThemeFromPreferences(sharedPreferences, resources)
setThemeFromPreferences(sharedPreferences, resources)
mApplicationComponent = DaggerApplicationComponent
.builder()
.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
import android.content.Context
import android.content.SharedPreferences
import android.content.res.Resources
import android.net.ConnectivityManager
import android.widget.TextView
import android.os.Build
import androidx.appcompat.app.AppCompatDelegate
import com.h.pixeldroid.R
import java.text.ParseException
import java.util.Date
class Utils {
companion object {
fun hasInternet(context: Context): Boolean {
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
return cm.activeNetwork != null
fun hasInternet(context: Context): Boolean {
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)
}
fun normalizeDomain(domain: String): String {
return "https://" + domain
.replace("http://", "")
.replace("https://", "")
.trim(Char::isWhitespace)
//Dark
themes[2] -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
}
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()
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,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.Single
import okhttp3.MultipartBody
@ -249,10 +249,10 @@ interface PixelfedAPI {
): Call<Account>
@GET("/api/v1/statuses/{id}")
fun getStatus(
suspend fun getStatus(
@Header("Authorization") authorization: String,
@Path("id") accountId : String
): Call<Status>
): Status
@Multipart
@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.Intent
import android.util.Log
import androidx.core.content.ContextCompat.startActivity
import com.h.pixeldroid.ProfileActivity
import com.h.pixeldroid.api.PixelfedAPI
import com.h.pixeldroid.profile.ProfileActivity
import com.h.pixeldroid.utils.api.PixelfedAPI
import retrofit2.Call
import retrofit2.Callback
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

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects
package com.h.pixeldroid.utils.api.objects
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

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

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects
package com.h.pixeldroid.utils.api.objects
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

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects
package com.h.pixeldroid.utils.api.objects
interface FeedContent {
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

View File

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

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects
package com.h.pixeldroid.utils.api.objects
data class Instance (
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

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

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.ForeignKey
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.util.Date
@ -26,9 +26,9 @@ https://docs.joinmastodon.org/entities/notification/
data class Notification(
//Required attributes
override val id: String,
val type: NotificationType,
val created_at: Date, //ISO 8601 Datetime
val account: Account,
val type: NotificationType?,
val created_at: Date?, //ISO 8601 Datetime
val account: Account?,
//Optional attributes
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

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects
package com.h.pixeldroid.utils.api.objects
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

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects
package com.h.pixeldroid.utils.api.objects
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

View File

@ -1,9 +1,10 @@
package com.h.pixeldroid.objects
package com.h.pixeldroid.utils.api.objects
import android.app.DownloadManager
import android.content.Context
import android.content.Intent
import android.database.Cursor
import android.graphics.ColorMatrix
import android.graphics.ColorMatrixColorFilter
import android.net.Uri
import android.os.Environment
@ -14,17 +15,11 @@ import android.view.View.VISIBLE
import android.widget.ImageView
import android.widget.TextView
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.h.pixeldroid.R
import com.h.pixeldroid.api.PixelfedAPI
import com.h.pixeldroid.db.entities.UserDatabaseEntity
import com.h.pixeldroid.utils.HtmlUtils.Companion.getDomain
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 com.h.pixeldroid.utils.api.PixelfedAPI
import com.h.pixeldroid.posts.getDomain
import com.h.pixeldroid.posts.parseHTMLText
import kotlinx.android.synthetic.main.post_fragment.view.*
import java.io.File
import java.io.Serializable
@ -107,11 +102,13 @@ open class Status(
// Set dark layout and warning message
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) {
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

View File

@ -1,4 +1,4 @@
package com.h.pixeldroid.objects
package com.h.pixeldroid.utils.api.objects
data class Token(
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.RoomDatabase
import androidx.room.TypeConverters
import com.h.pixeldroid.db.dao.*
import com.h.pixeldroid.db.dao.feedContent.NotificationDao
import com.h.pixeldroid.db.dao.feedContent.posts.HomePostDao
import com.h.pixeldroid.db.dao.feedContent.posts.PublicPostDao
import com.h.pixeldroid.db.entities.HomeStatusDatabaseEntity
import com.h.pixeldroid.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.db.entities.PublicFeedStatusDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity
import com.h.pixeldroid.objects.Notification
import com.h.pixeldroid.utils.db.dao.*
import com.h.pixeldroid.utils.db.dao.feedContent.NotificationDao
import com.h.pixeldroid.utils.db.dao.feedContent.posts.HomePostDao
import com.h.pixeldroid.utils.db.dao.feedContent.posts.PublicPostDao
import com.h.pixeldroid.utils.db.entities.HomeStatusDatabaseEntity
import com.h.pixeldroid.utils.db.entities.InstanceDatabaseEntity
import com.h.pixeldroid.utils.db.entities.PublicFeedStatusDatabaseEntity
import com.h.pixeldroid.utils.db.entities.UserDatabaseEntity
import com.h.pixeldroid.utils.api.objects.Notification
@Database(entities = [
InstanceDatabaseEntity::class,

View File

@ -1,9 +1,9 @@
package com.h.pixeldroid.db
package com.h.pixeldroid.utils.db
import androidx.room.TypeConverter
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.h.pixeldroid.objects.*
import com.h.pixeldroid.utils.api.objects.*
import java.util.*
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