Skip to content

Instantly share code, notes, and snippets.

View Astroa7m's full-sized avatar

Ahmed Samir Astroa7m

  • Elkdocs
  • Muscat, Oman
  • 12:39 (UTC +04:00)
  • X @astroa7m
View GitHub Profile
@Suppress("BlockingMethodInNonBlockingContext")
class RemoteImageWorker(
private val context: Context,
workerParameters: WorkerParameters
) : CoroutineWorker(
context,
workerParameters
) {
override suspend fun doWork(): Result {
class MainScreenViewModel (
application: Application
) : ViewModel() {
private val preferencesManager = PreferencesManager(application)
val imageCategoryIndex = preferencesManager.imageCategoryPref
private var workManager = WorkManager.getInstance(application)
init {
@Astroa7m
Astroa7m / PreferencesManager.kt
Created June 30, 2022 13:37
Preferences manager
class PreferencesManager(
private val application: Application,
) {
private companion object{
val Context.pref: DataStore<Preferences> by preferencesDataStore(
name = "pref_settings"
)
}
val imageCategoryPref = application.applicationContext.pref.data
@Astroa7m
Astroa7m / RemoteImageService.kt
Last active June 30, 2022 13:33
Remote image service
interface RemoteImageService {
/**
* returns a random image object from unsplash api
* @param clientId should be replaced with your client id
* which you can obtain it from unsplash api
*/
@GET
suspend fun getRandomImageObject(
@Url unsplashBaseUrl: String = "https://api.unsplash.com/photos/random",
@Astroa7m
Astroa7m / widget_initial_layout.xml
Created June 29, 2022 18:16
Widget Initial layout
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="350dp"
android:layout_height="350dp"
android:scaleType="centerCrop"
@Astroa7m
Astroa7m / widget_provider.xml
Created June 29, 2022 18:00
Widget provider
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/widget_description"
android:initialLayout="@layout/widget_initial_layout"
android:minWidth="500dp"
android:minHeight="500dp"
android:minResizeWidth="200dp"
android:minResizeHeight="200dp"
android:previewImage="@drawable/ic_image"
android:resizeMode="vertical|horizontal" />
@Astroa7m
Astroa7m / RemoteWidgetReceiver.kt
Created June 29, 2022 17:42
RemoteWidgetReceiver
class RemoteWidgetReceiver: GlanceAppWidgetReceiver() {
override val glanceAppWidget: GlanceAppWidget
get() = RemoteWidget()
}
@Astroa7m
Astroa7m / RemoteWidget.kt
Last active June 29, 2022 17:35
RemoteWidget
import androidx.compose.runtime.Composable
import androidx.glance.GlanceModifier
import androidx.glance.Image
import androidx.glance.ImageProvider
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.layout.ContentScale
import androidx.glance.layout.fillMaxSize
import com.example.remotewidget.R
class RemoteWidget : GlanceAppWidget() {
@Astroa7m
Astroa7m / Build.gradle
Created June 29, 2022 17:19
Build.gradle
//other dependencies....
.....
....
//Glance
implementation "androidx.glance:glance-appwidget:1.0.0-alpha03"
//WorkManger
implementation "androidx.work:work-runtime-ktx:2.7.1"
//Retrofit
{
ConstraintSets:{...},
Transitions: {
default: {
from: 'start',
to: 'end',
pathMotionArc: 'startVertical',
// key here must be Key with capital K
KeyFrames: {
KeyAttributes: [