Merge branch 'code_reorganize' into 'master'
Reorganize Code Closes #251 See merge request pixeldroid/PixelDroid!271
This commit is contained in:
commit
7d1c7a2eb7
|
@ -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'
|
||||||
|
|
|
@ -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.*
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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" />
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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!!)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
package com.h.pixeldroid.interfaces
|
|
||||||
|
|
||||||
import com.zomato.photofilters.imageprocessors.Filter
|
|
||||||
|
|
||||||
interface FilterListFragmentListener {
|
|
||||||
fun onFilterSelected(filter: Filter)
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
package com.h.pixeldroid.interfaces
|
|
||||||
|
|
||||||
interface PostCreationListener {
|
|
||||||
fun onClick(position: Int)
|
|
||||||
}
|
|
|
@ -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
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -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
|
|
@ -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) {
|
|
@ -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?) {
|
|
@ -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
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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]
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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
|
|
@ -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)
|
|
@ -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
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
@ -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()
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
|
@ -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() {
|
|
@ -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
|
|
@ -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,
|
|
@ -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
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -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
|
|
@ -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,
|
|
@ -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,
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -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
|
|
@ -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
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -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.*
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
|
@ -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
|
|
@ -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.*
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
|
@ -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() {
|
|
@ -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
|
|
@ -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
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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
|
|
@ -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() {
|
|
@ -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.*
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
@ -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) {
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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))
|
|
@ -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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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")
|
|
@ -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
|
|
@ -1,4 +1,4 @@
|
||||||
package com.h.pixeldroid.objects
|
package com.h.pixeldroid.utils.api.objects
|
||||||
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.h.pixeldroid.objects
|
package com.h.pixeldroid.utils.api.objects
|
||||||
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.h.pixeldroid.objects
|
package com.h.pixeldroid.utils.api.objects
|
||||||
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
|
@ -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
|
|
@ -1,4 +1,4 @@
|
||||||
package com.h.pixeldroid.objects
|
package com.h.pixeldroid.utils.api.objects
|
||||||
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.h.pixeldroid.objects
|
package com.h.pixeldroid.utils.api.objects
|
||||||
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.h.pixeldroid.objects
|
package com.h.pixeldroid.utils.api.objects
|
||||||
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
|
@ -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?
|
|
@ -1,4 +1,4 @@
|
||||||
package com.h.pixeldroid.objects
|
package com.h.pixeldroid.utils.api.objects
|
||||||
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
|
@ -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
|
|
@ -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?,
|
|
@ -1,4 +1,4 @@
|
||||||
package com.h.pixeldroid.objects
|
package com.h.pixeldroid.utils.api.objects
|
||||||
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
|
@ -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
|
|
@ -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,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.h.pixeldroid.objects
|
package com.h.pixeldroid.utils.api.objects
|
||||||
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.h.pixeldroid.objects
|
package com.h.pixeldroid.utils.api.objects
|
||||||
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.h.pixeldroid.objects
|
package com.h.pixeldroid.utils.api.objects
|
||||||
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.h.pixeldroid.objects
|
package com.h.pixeldroid.utils.api.objects
|
||||||
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.h.pixeldroid.objects
|
package com.h.pixeldroid.utils.api.objects
|
||||||
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.h.pixeldroid.objects
|
package com.h.pixeldroid.utils.api.objects
|
||||||
|
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
|
@ -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?,
|
|
@ -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,
|
|
@ -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 {
|
|
@ -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
Loading…
Reference in New Issue