Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Created a media player control widget #1005

Merged
merged 13 commits into from Oct 13, 2020
Merged
1 change: 1 addition & 0 deletions app/build.gradle.kts
Expand Up @@ -133,6 +133,7 @@ dependencies {

implementation(Config.Dependency.Misc.jackson)
implementation(Config.Dependency.Square.okhttp)
implementation(Config.Dependency.Square.picasso)

"fullImplementation"(Config.Dependency.Play.location)
"fullImplementation"(Config.Dependency.Firebase.core)
Expand Down
23 changes: 22 additions & 1 deletion app/src/main/AndroidManifest.xml
Expand Up @@ -78,6 +78,23 @@
android:resource="@xml/entity_widget_info" />
</receiver>

<receiver android:name=".widgets.media_player_controls.MediaPlayerControlsWidget">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="io.homeassistant.companion.android.widgets.media_player_controls.MediaPlayerControlsWidget.RECEIVE_DATA" />
<action android:name="io.homeassistant.companion.android.widgets.media_player_controls.MediaPlayerControlsWidget.UPDATE_MEDIA_IMAGE" />
<action android:name="io.homeassistant.companion.android.widgets.media_player_controls.MediaPlayerControlsWidget.CALL_PREV_TRACK" />
<action android:name="io.homeassistant.companion.android.widgets.media_player_controls.MediaPlayerControlsWidget.CALL_REWIND" />
<action android:name="io.homeassistant.companion.android.widgets.media_player_controls.MediaPlayerControlsWidget.CALL_PLAYPAUSE" />
<action android:name="io.homeassistant.companion.android.widgets.media_player_controls.MediaPlayerControlsWidget.CALL_FASTFORWARD" />
<action android:name="io.homeassistant.companion.android.widgets.media_player_controls.MediaPlayerControlsWidget.CALL_NEXT_TRACK" />
</intent-filter>

<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/media_player_control_widget_info" />
</receiver>

<receiver android:name=".widgets.template.TemplateWidget" android:label="Template Widget">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
Expand Down Expand Up @@ -107,7 +124,11 @@
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter>
</activity>

<activity android:name=".widgets.media_player_controls.MediaPlayerControlsWidgetConfigureActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter>
</activity>
<activity android:name=".widgets.template.TemplateWidgetConfigureActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
Expand Down
Expand Up @@ -25,6 +25,8 @@ import io.homeassistant.companion.android.database.sensor.SensorDao
import io.homeassistant.companion.android.database.sensor.Setting
import io.homeassistant.companion.android.database.widget.ButtonWidgetDao
import io.homeassistant.companion.android.database.widget.ButtonWidgetEntity
import io.homeassistant.companion.android.database.widget.MediaPlayerControlsWidgetDao
import io.homeassistant.companion.android.database.widget.MediaPlayerControlsWidgetEntity
import io.homeassistant.companion.android.database.widget.StaticWidgetDao
import io.homeassistant.companion.android.database.widget.StaticWidgetEntity
import io.homeassistant.companion.android.database.widget.TemplateWidgetDao
Expand All @@ -38,15 +40,17 @@ import kotlinx.coroutines.runBlocking
Sensor::class,
Setting::class,
ButtonWidgetEntity::class,
MediaPlayerControlsWidgetEntity::class,
StaticWidgetEntity::class,
TemplateWidgetEntity::class
],
version = 11
version = 12
)
abstract class AppDatabase : RoomDatabase() {
abstract fun authenticationDao(): AuthenticationDao
abstract fun sensorDao(): SensorDao
abstract fun buttonWidgetDao(): ButtonWidgetDao
abstract fun mediaPlayCtrlWidgetDao(): MediaPlayerControlsWidgetDao
abstract fun staticWidgetDao(): StaticWidgetDao
abstract fun templateWidgetDao(): TemplateWidgetDao

Expand Down Expand Up @@ -83,7 +87,8 @@ abstract class AppDatabase : RoomDatabase() {
MIGRATION_7_8,
MIGRATION_8_9,
MIGRATION_9_10,
MIGRATION_10_11
MIGRATION_10_11,
MIGRATION_11_12
)
.fallbackToDestructiveMigration()
.build()
Expand Down Expand Up @@ -254,6 +259,12 @@ abstract class AppDatabase : RoomDatabase() {
}
}

private val MIGRATION_11_12 = object : Migration(11, 12) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("CREATE TABLE IF NOT EXISTS `mediaplayctrls_widgets` (`id` INTEGER NOT NULL, `entityId` TEXT NOT NULL, `label` TEXT, `showSkip` INTEGER NOT NULL, `showSeek` INTEGER NOT NULL, PRIMARY KEY(`id`))")
}
}

private fun createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notificationManager = appContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
Expand Down
@@ -0,0 +1,23 @@
package io.homeassistant.companion.android.database.widget

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Update

@Dao
interface MediaPlayerControlsWidgetDao {

@Query("SELECT * FROM mediaplayctrls_widgets WHERE id = :id")
fun get(id: Int): MediaPlayerControlsWidgetEntity?

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun add(mediaPlayCtrlWidgetEntity: MediaPlayerControlsWidgetEntity)

@Update
fun update(mediaPlayCtrlWidgetEntity: MediaPlayerControlsWidgetEntity)

@Query("DELETE FROM mediaplayctrls_widgets WHERE id = :id")
fun delete(id: Int)
}
@@ -0,0 +1,19 @@
package io.homeassistant.companion.android.database.widget

import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity(tableName = "mediaplayctrls_widgets")
data class MediaPlayerControlsWidgetEntity(
@PrimaryKey
val id: Int,
@ColumnInfo(name = "entityId")
val entityId: String,
@ColumnInfo(name = "label")
val label: String?,
@ColumnInfo(name = "showSkip")
val showSkip: Boolean,
@ColumnInfo(name = "showSeek")
val showSeek: Boolean
)
Expand Up @@ -6,21 +6,23 @@ import io.homeassistant.companion.android.widgets.button.ButtonWidget
import io.homeassistant.companion.android.widgets.button.ButtonWidgetConfigureActivity
import io.homeassistant.companion.android.widgets.entity.EntityWidget
import io.homeassistant.companion.android.widgets.entity.EntityWidgetConfigureActivity
import io.homeassistant.companion.android.widgets.media_player_controls.MediaPlayerControlsWidget
import io.homeassistant.companion.android.widgets.media_player_controls.MediaPlayerControlsWidgetConfigureActivity
import io.homeassistant.companion.android.widgets.template.TemplateWidget
import io.homeassistant.companion.android.widgets.template.TemplateWidgetConfigureActivity

@Component(dependencies = [AppComponent::class])
interface ProviderComponent {

fun inject(receiver: ButtonWidget)

fun inject(activity: ButtonWidgetConfigureActivity)

fun inject(receiver: EntityWidget)
fun inject(receiver: MediaPlayerControlsWidget)
fun inject(activity: MediaPlayerControlsWidgetConfigureActivity)

fun inject(receiver: EntityWidget)
fun inject(activity: EntityWidgetConfigureActivity)

fun inject(receiver: TemplateWidget)

fun inject(activity: TemplateWidgetConfigureActivity)
}