A cheap attempt at a native Bluesky client for Android
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

*: cleanup

geesawra c63185c6 402e317a

-57
-46
app/src/main/java/industries/geesawra/jerryno/MainActivity.kt
··· 15 15 import androidx.compose.material3.ExperimentalMaterial3Api 16 16 import androidx.compose.material3.MaterialTheme 17 17 import androidx.compose.material3.Surface 18 - import androidx.compose.runtime.Composable 19 - import androidx.compose.runtime.DisposableEffect 20 - import androidx.compose.runtime.LaunchedEffect 21 - import androidx.compose.runtime.remember 22 18 import androidx.compose.runtime.rememberCoroutineScope 23 19 import androidx.compose.ui.Alignment 24 20 import androidx.compose.ui.Modifier 25 21 import androidx.compose.ui.graphics.TransformOrigin 26 22 import androidx.compose.ui.platform.LocalContext 27 - import androidx.compose.ui.viewinterop.AndroidView 28 23 import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel 29 - import androidx.media3.common.MediaItem 30 - import androidx.media3.exoplayer.ExoPlayer 31 - import androidx.media3.ui.PlayerView 32 24 import androidx.navigation.compose.NavHost 33 25 import androidx.navigation.compose.composable 34 26 import androidx.navigation.compose.rememberNavController ··· 51 43 enum class TimelineScreen() { 52 44 Login, 53 45 Timeline, 54 - Compose 55 46 } 56 47 57 48 @AndroidEntryPoint ··· 156 147 } 157 148 } 158 149 159 - @Composable 160 - fun ExoPlayerView(uri: String, modifier: Modifier) { 161 - // Get the current context 162 - val context = LocalContext.current 163 - 164 - // Initialize ExoPlayer 165 - val exoPlayer = ExoPlayer.Builder(context).build() 166 - 167 - // Create a MediaSource 168 - val mediaSource = remember(uri) { 169 - MediaItem.fromUri(uri) 170 - } 171 - 172 - // Set MediaSource to ExoPlayer 173 - LaunchedEffect(mediaSource) { 174 - exoPlayer.setMediaItem(mediaSource) 175 - exoPlayer.prepare() 176 - } 177 - 178 - // Manage lifecycle events 179 - DisposableEffect(Unit) { 180 - onDispose { 181 - exoPlayer.release() 182 - } 183 - } 184 - 185 - // Use AndroidView to embed an Android View (PlayerView) into Compose 186 - AndroidView( 187 - factory = { ctx -> 188 - PlayerView(ctx).apply { 189 - player = exoPlayer 190 - } 191 - }, 192 - modifier = modifier 193 - ) 194 - } 195 -
-11
app/src/main/java/industries/geesawra/jerryno/datalayer/Bluesky.kt
··· 30 30 import com.atproto.repo.UploadBlobResponse 31 31 import com.atproto.server.CreateSessionRequest 32 32 import com.atproto.server.CreateSessionResponse 33 - import com.atproto.server.GetSessionResponse 34 33 import com.atproto.server.RefreshSessionResponse 35 34 import industries.geesawra.jerryno.rkey 36 35 import io.ktor.client.HttpClient ··· 104 103 handle = session.handle, 105 104 did = session.did, 106 105 active = session.active, 107 - ) 108 - } 109 - 110 - fun fromGetSessionResponse(session: GetSessionResponse): SessionData { 111 - return SessionData( 112 - handle = session.handle, 113 - did = session.did, 114 - active = session.active, 115 - accessJwt = "", 116 - refreshJwt = "" 117 106 ) 118 107 } 119 108 }