Started DMs

This commit is contained in:
MarieJ 2024-01-11 19:32:50 +01:00
parent 1956469b7d
commit 86b0fe1c60
11 changed files with 164 additions and 6886 deletions

View File

@ -24,10 +24,14 @@
android:name=".utils.PixelDroidApplication" android:name=".utils.PixelDroidApplication"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:localeConfig="@xml/locales_config"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:localeConfig="@xml/locales_config"
android:theme="@style/BaseAppTheme"> android:theme="@style/BaseAppTheme">
<activity
android:name=".directMessages.ConversationsActivity"
android:exported="false" />
<service <service
android:name="androidx.appcompat.app.AppLocalesMetadataHolderService" android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
android:enabled="false" android:enabled="false"
@ -40,22 +44,24 @@
<activity <activity
android:name=".posts.AlbumActivity" android:name=".posts.AlbumActivity"
android:exported="false" android:exported="false"
android:theme="@style/AppTheme.ActionBar.Transparent"/> android:theme="@style/AppTheme.ActionBar.Transparent" />
<activity <activity
android:name=".profile.EditProfileActivity" android:name=".profile.EditProfileActivity"
android:exported="false"/> android:exported="false" />
<activity <activity
android:name=".posts.MediaViewerActivity" android:name=".posts.MediaViewerActivity"
android:configChanges="keyboardHidden|orientation|screenSize" android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="false" android:exported="false"
android:theme="@style/BaseAppTheme.NoActionBar" /> android:theme="@style/BaseAppTheme.NoActionBar" />
<activity android:name=".postCreation.camera.CameraActivity"/> <activity android:name=".postCreation.camera.CameraActivity" />
<activity android:name=".postCreation.camera.CameraActivityShortcut" <activity
android:exported = "true" android:name=".postCreation.camera.CameraActivityShortcut"
android:exported="true"
android:parentActivityName=".MainActivity"> android:parentActivityName=".MainActivity">
<meta-data <meta-data
android:name="android.support.PARENT_ACTIVITY" android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" /> android:value=".MainActivity" />
<intent-filter> <intent-filter>
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />
</intent-filter> </intent-filter>
@ -67,8 +73,8 @@
<activity <activity
android:name=".postCreation.PostCreationActivity" android:name=".postCreation.PostCreationActivity"
android:exported="true" android:exported="true"
android:windowSoftInputMode="adjustResize" android:theme="@style/BaseAppTheme.NoActionBar"
android:theme="@style/BaseAppTheme.NoActionBar"> android:windowSoftInputMode="adjustResize">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" /> <action android:name="android.intent.action.SEND_MULTIPLE" />
<action android:name="android.intent.action.SEND" /> <action android:name="android.intent.action.SEND" />
@ -95,7 +101,7 @@
android:name=".profile.ProfileActivity" android:name=".profile.ProfileActivity"
android:screenOrientation="sensorPortrait" android:screenOrientation="sensorPortrait"
tools:ignore="LockedOrientationActivity" /> tools:ignore="LockedOrientationActivity" />
<activity android:name=".profile.CollectionActivity"/> <activity android:name=".profile.CollectionActivity" />
<activity <activity
android:name=".settings.SettingsActivity" android:name=".settings.SettingsActivity"
android:label="@string/title_activity_settings2" android:label="@string/title_activity_settings2"
@ -105,8 +111,8 @@
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:exported="true" android:exported="true"
android:theme="@style/Theme.App.Starting"
android:screenOrientation="sensorPortrait" android:screenOrientation="sensorPortrait"
android:theme="@style/Theme.App.Starting"
android:windowSoftInputMode="adjustPan" android:windowSoftInputMode="adjustPan"
tools:ignore="LockedOrientationActivity"> tools:ignore="LockedOrientationActivity">
<intent-filter> <intent-filter>
@ -118,7 +124,8 @@
<meta-data <meta-data
android:name="android.app.default_searchable" android:name="android.app.default_searchable"
android:value="org.pixeldroid.app.searchDiscover.SearchActivity" /> android:value="org.pixeldroid.app.searchDiscover.SearchActivity" />
<meta-data android:name="android.app.shortcuts" <meta-data
android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" /> android:resource="@xml/shortcuts" />
</activity> </activity>
<activity <activity
@ -153,7 +160,7 @@
android:name="android.app.searchable" android:name="android.app.searchable"
android:resource="@xml/searchable" /> android:resource="@xml/searchable" />
</activity> </activity>
<activity android:name=".searchDiscover.TrendingActivity"/> <activity android:name=".searchDiscover.TrendingActivity" />
<activity <activity
android:name=".settings.AboutActivity" android:name=".settings.AboutActivity"
android:parentActivityName=".settings.SettingsActivity" android:parentActivityName=".settings.SettingsActivity"

View File

@ -42,6 +42,7 @@ import com.mikepenz.materialdrawer.widget.AccountHeaderView
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.ligi.tracedroid.sending.sendTraceDroidStackTracesIfExist import org.ligi.tracedroid.sending.sendTraceDroidStackTracesIfExist
import org.pixeldroid.app.databinding.ActivityMainBinding import org.pixeldroid.app.databinding.ActivityMainBinding
import org.pixeldroid.app.directMessages.ConversationsActivity
import org.pixeldroid.app.postCreation.camera.CameraFragment import org.pixeldroid.app.postCreation.camera.CameraFragment
import org.pixeldroid.app.posts.NestedScrollableHost import org.pixeldroid.app.posts.NestedScrollableHost
import org.pixeldroid.app.posts.feeds.cachedFeeds.CachedFeedFragment import org.pixeldroid.app.posts.feeds.cachedFeeds.CachedFeedFragment
@ -226,6 +227,10 @@ class MainActivity : BaseThemedWithoutBarActivity() {
nameRes = R.string.menu_settings nameRes = R.string.menu_settings
iconicsIcon = GoogleMaterial.Icon.gmd_settings iconicsIcon = GoogleMaterial.Icon.gmd_settings
}, },
primaryDrawerItem {
nameRes = R.string.logout
iconicsIcon = GoogleMaterial.Icon.gmd_close
},
primaryDrawerItem { primaryDrawerItem {
nameRes = R.string.logout nameRes = R.string.logout
iconicsIcon = GoogleMaterial.Icon.gmd_close iconicsIcon = GoogleMaterial.Icon.gmd_close
@ -235,6 +240,7 @@ class MainActivity : BaseThemedWithoutBarActivity() {
1 -> launchActivity(ProfileActivity()) 1 -> launchActivity(ProfileActivity())
2 -> launchActivity(SettingsActivity()) 2 -> launchActivity(SettingsActivity())
3 -> logOut() 3 -> logOut()
4 -> launchActivity(ConversationsActivity())
} }
false false
} }

View File

@ -0,0 +1,19 @@
package org.pixeldroid.app.directMessages
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import org.pixeldroid.app.R
import org.pixeldroid.app.directMessages.ui.main.ConversationsFragment
class ConversationsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_conversations)
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, ConversationsFragment.newInstance())
.commitNow()
}
}
}

View File

@ -0,0 +1,32 @@
package org.pixeldroid.app.directMessages.ui.main
import androidx.lifecycle.ViewModelProvider
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import org.pixeldroid.app.R
class ConversationsFragment : Fragment() {
companion object {
fun newInstance() = ConversationsFragment()
}
private lateinit var viewModel: ConversationsViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this).get(ConversationsViewModel::class.java)
// TODO: Use the ViewModel to watch the variable containing DM data and show it
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
return inflater.inflate(R.layout.fragment_main, container, false)
}
}

View File

@ -0,0 +1,25 @@
package org.pixeldroid.app.directMessages.ui.main
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import org.pixeldroid.app.utils.PixelDroidApplication
import org.pixeldroid.app.utils.di.PixelfedAPIHolder
import javax.inject.Inject
class ConversationsViewModel(application: Application) : AndroidViewModel(application) {
// TODO: Implement the ViewModel
// API calls for DM, store results in some variable here
@Inject
lateinit var apiHolder: PixelfedAPIHolder
init {
(application as PixelDroidApplication).getAppComponent().inject(this)
}
suspend fun loadConversations() {
val api = apiHolder.api ?: apiHolder.setToCurrentUser()
val conversations = api.viewAllConversations()
}
}

View File

@ -290,6 +290,24 @@ interface PixelfedAPI {
@Query("account_id") account_id: Boolean? = null @Query("account_id") account_id: Boolean? = null
): List<Notification> ): List<Notification>
@GET("/api/v1/conversations")
suspend fun viewAllConversations(
@Query("max_id") max_id: String? = null,
@Query("since_id") since_id: String? = null,
@Query("min_id") min_id: String? = null,
@Query("limit") limit: String? = null
): List<Conversation>
@DELETE("/api/v1/conversations/{id}")
suspend fun deleteConversation(
@Path("id") id: String
)
@POST("/api/v1/conversations/{id}/read")
suspend fun markConversationAsRead(
@Path("id") id: String
): Conversation
@GET("/api/v1/accounts/verify_credentials") @GET("/api/v1/accounts/verify_credentials")
suspend fun verifyCredentials( suspend fun verifyCredentials(
//The authorization header needs to be of the form "Bearer <token>" //The authorization header needs to be of the form "Bearer <token>"

View File

@ -0,0 +1,16 @@
package org.pixeldroid.app.utils.api.objects
import java.io.Serializable
/*
Represents a conversation.
https://docs.joinmastodon.org/entities/Conversation/
*/
data class Conversation(
//Base attributes
override val id: String?,
val unread: Boolean? = true,
val accounts: List<Account>? = null,
val last_statuses: Status? = null
) : Serializable, FeedContent

View File

@ -7,6 +7,7 @@ import org.pixeldroid.app.utils.PixelDroidApplication
import org.pixeldroid.app.utils.db.AppDatabase import org.pixeldroid.app.utils.db.AppDatabase
import org.pixeldroid.app.utils.BaseFragment import org.pixeldroid.app.utils.BaseFragment
import dagger.Component import dagger.Component
import org.pixeldroid.app.directMessages.ui.main.ConversationsViewModel
import org.pixeldroid.app.postCreation.PostCreationViewModel import org.pixeldroid.app.postCreation.PostCreationViewModel
import org.pixeldroid.app.profile.EditProfileViewModel import org.pixeldroid.app.profile.EditProfileViewModel
import org.pixeldroid.app.utils.notificationsWorker.NotificationsWorker import org.pixeldroid.app.utils.notificationsWorker.NotificationsWorker
@ -22,6 +23,7 @@ interface ApplicationComponent {
fun inject(notificationsWorker: NotificationsWorker) fun inject(notificationsWorker: NotificationsWorker)
fun inject(postCreationViewModel: PostCreationViewModel) fun inject(postCreationViewModel: PostCreationViewModel)
fun inject(editProfileViewModel: EditProfileViewModel) fun inject(editProfileViewModel: EditProfileViewModel)
fun inject(editProfileViewModel: ConversationsViewModel)
val context: Context? val context: Context?
val application: Application? val application: Application?

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ConversationsActivity" />

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/conversations"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.main.ConversationsFragment">
<TextView
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ConversationsFragment"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

File diff suppressed because it is too large Load Diff