diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml index 11a95a8..c05c711 100644 --- a/.idea/assetWizardSettings.xml +++ b/.idea/assetWizardSettings.xml @@ -158,7 +158,7 @@ @@ -168,14 +168,8 @@ diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 961fd3f..1565ab4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,6 +40,9 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/hossainkhan/android/demo/data/LayoutDataStore.kt b/app/src/main/java/com/hossainkhan/android/demo/data/LayoutDataStore.kt index 69505eb..9b1dfd7 100644 --- a/app/src/main/java/com/hossainkhan/android/demo/data/LayoutDataStore.kt +++ b/app/src/main/java/com/hossainkhan/android/demo/data/LayoutDataStore.kt @@ -176,7 +176,28 @@ class LayoutDataStore @Inject constructor( layoutResourceId = R.layout.demo_movie_details, thumbnailResourceId = R.drawable.spider_verse_poster, title = "Demo: Movie Details", - description = "A demo screen containing movie details. Rotate device to see constraints in action.") + description = "A demo screen containing movie details. Rotate device to see constraints in action."), + + /* + * This is a demo of TED Talk video playback screen. + * ___________________ + * )=| | / + * | TED Talks |====|| + * | |====|| + * | |+ \ + * ------------------- + * (--) + * * * + * * * + * * * + * * * + * * * + */ + LayoutInformation( + layoutResourceId = R.layout.demo_ted_talk_playback, + thumbnailResourceId = R.drawable.ic_ted_talks_logo, + title = "Demo: TED Talk Preview Screen", + description = "A demo screen containing TED talks video playback screen with different controls.") /* diff --git a/app/src/main/java/com/hossainkhan/android/demo/di/ActivityBindingModule.kt b/app/src/main/java/com/hossainkhan/android/demo/di/ActivityBindingModule.kt index ad96348..7b364f9 100644 --- a/app/src/main/java/com/hossainkhan/android/demo/di/ActivityBindingModule.kt +++ b/app/src/main/java/com/hossainkhan/android/demo/di/ActivityBindingModule.kt @@ -17,6 +17,7 @@ package com.hossainkhan.android.demo.di import com.hossainkhan.android.demo.ui.functionaldemo.MovieDetailsPreviewActivity +import com.hossainkhan.android.demo.ui.functionaldemo.TedTalkPlaybackActivity import com.hossainkhan.android.demo.ui.layoutpreview.LayoutChainStyleActivity import com.hossainkhan.android.demo.ui.layoutpreview.LayoutDimensionMinMaxActivity import com.hossainkhan.android.demo.ui.layoutpreview.LayoutGuidelineBarrierActivity @@ -27,9 +28,9 @@ import dagger.Module import dagger.android.ContributesAndroidInjector /** - * We want Dagger.Android to create a Subcomponent which has a parent Component of whichever - * module ActivityBindingModule is on, in our case that will be [DemoApplicationComponent]. - * + * We want Dagger.Android to create a Subcomponent which has a parent Component of whichever + * module ActivityBindingModule is on, in our case that will be [DemoApplicationComponent]. + * * The beautiful part about this setup is that you never need to tell [DemoApplicationComponent] * that it is going to have all these subcomponents nor do you need to tell these subcomponents * that [DemoApplicationComponent] exists. @@ -78,4 +79,8 @@ abstract class ActivityBindingModule { @ActivityScope @ContributesAndroidInjector abstract fun layoutMovieDetailsPreviewActivity(): MovieDetailsPreviewActivity + + @ActivityScope + @ContributesAndroidInjector + abstract fun layoutTedTalkPlaybackPreviewActivity(): TedTalkPlaybackActivity } \ No newline at end of file diff --git a/app/src/main/java/com/hossainkhan/android/demo/ui/browse/LayoutBrowseViewModel.kt b/app/src/main/java/com/hossainkhan/android/demo/ui/browse/LayoutBrowseViewModel.kt index 1c96090..ae96860 100644 --- a/app/src/main/java/com/hossainkhan/android/demo/ui/browse/LayoutBrowseViewModel.kt +++ b/app/src/main/java/com/hossainkhan/android/demo/ui/browse/LayoutBrowseViewModel.kt @@ -23,6 +23,7 @@ import com.hossainkhan.android.demo.R import com.hossainkhan.android.demo.data.AppDataStore import com.hossainkhan.android.demo.data.LayoutInformation import com.hossainkhan.android.demo.ui.functionaldemo.MovieDetailsPreviewActivity +import com.hossainkhan.android.demo.ui.functionaldemo.TedTalkPlaybackActivity import com.hossainkhan.android.demo.ui.layoutpreview.LayoutChainStyleActivity import com.hossainkhan.android.demo.ui.layoutpreview.LayoutDimensionMinMaxActivity import com.hossainkhan.android.demo.ui.layoutpreview.LayoutGuidelineBarrierActivity @@ -73,6 +74,9 @@ class LayoutBrowseViewModel( R.layout.demo_movie_details -> { browseNavigator.loadLayoutPreview(MovieDetailsPreviewActivity::class.java, layoutResId) } + R.layout.demo_ted_talk_playback -> { + browseNavigator.loadLayoutPreview(TedTalkPlaybackActivity::class.java, layoutResId) + } else -> { // By default it loads the preview activity with the layout requested. browseNavigator.loadLayoutPreview(layoutResId) diff --git a/app/src/main/java/com/hossainkhan/android/demo/ui/functionaldemo/TedTalkPlaybackActivity.kt b/app/src/main/java/com/hossainkhan/android/demo/ui/functionaldemo/TedTalkPlaybackActivity.kt new file mode 100644 index 0000000..ca52a4b --- /dev/null +++ b/app/src/main/java/com/hossainkhan/android/demo/ui/functionaldemo/TedTalkPlaybackActivity.kt @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2019 Hossain Khan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hossainkhan.android.demo.ui.functionaldemo + +import android.os.Bundle +import android.view.View +import android.widget.ImageButton +import android.widget.Toast +import com.hossainkhan.android.demo.R +import com.hossainkhan.android.demo.ui.layoutpreview.LayoutPreviewBaseActivity + +class TedTalkPlaybackActivity : LayoutPreviewBaseActivity() { + private val generalClickListener = View.OnClickListener { view -> + Toast.makeText(view.context, "You tapped on ${view}", Toast.LENGTH_SHORT).show() + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + // Apply generic toast listener to touchable views so that user gets feedback when they tap it + applyToastListener( + findViewById(R.id.action_prev_track), + findViewById(R.id.action_rewind15), + findViewById(R.id.action_play_pause), + findViewById(R.id.action_forward15), + findViewById(R.id.action_next_track) + ) + } + + private fun applyToastListener(vararg views: View) { + views.forEach { + it.setOnClickListener(generalClickListener) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable-xxxhdpi/thumb_roger_hanlon.png b/app/src/main/res/drawable-xxxhdpi/thumb_roger_hanlon.png new file mode 100644 index 0000000..14d0b24 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/thumb_roger_hanlon.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/thumb_ted_talk.png b/app/src/main/res/drawable-xxxhdpi/thumb_ted_talk.png new file mode 100644 index 0000000..7128efa Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/thumb_ted_talk.png differ diff --git a/app/src/main/res/drawable/circle.xml b/app/src/main/res/drawable/circle.xml new file mode 100644 index 0000000..6503aea --- /dev/null +++ b/app/src/main/res/drawable/circle.xml @@ -0,0 +1,27 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_forward_30_black_42dp.xml b/app/src/main/res/drawable/ic_forward_30_black_42dp.xml new file mode 100644 index 0000000..218837a --- /dev/null +++ b/app/src/main/res/drawable/ic_forward_30_black_42dp.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_play_arrow_black_42dp.xml b/app/src/main/res/drawable/ic_play_arrow_black_42dp.xml new file mode 100644 index 0000000..c927ebe --- /dev/null +++ b/app/src/main/res/drawable/ic_play_arrow_black_42dp.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_replay_30_black_42dp.xml b/app/src/main/res/drawable/ic_replay_30_black_42dp.xml new file mode 100644 index 0000000..9cf95d9 --- /dev/null +++ b/app/src/main/res/drawable/ic_replay_30_black_42dp.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_skip_next_black_42dp.xml b/app/src/main/res/drawable/ic_skip_next_black_42dp.xml new file mode 100644 index 0000000..8e848bb --- /dev/null +++ b/app/src/main/res/drawable/ic_skip_next_black_42dp.xml @@ -0,0 +1,25 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_skip_previous_black_42dp.xml b/app/src/main/res/drawable/ic_skip_previous_black_42dp.xml new file mode 100644 index 0000000..ecae220 --- /dev/null +++ b/app/src/main/res/drawable/ic_skip_previous_black_42dp.xml @@ -0,0 +1,25 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_ted_talks_logo.xml b/app/src/main/res/drawable/ic_ted_talks_logo.xml new file mode 100644 index 0000000..9934c9d --- /dev/null +++ b/app/src/main/res/drawable/ic_ted_talks_logo.xml @@ -0,0 +1,21 @@ + + + + + diff --git a/app/src/main/res/layout/demo_ted_talk_playback.xml b/app/src/main/res/layout/demo_ted_talk_playback.xml new file mode 100644 index 0000000..0badc45 --- /dev/null +++ b/app/src/main/res/layout/demo_ted_talk_playback.xml @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index ce306d7..0b87ef8 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -28,6 +28,7 @@ 40dp 80dp 120dp + 220dp 1 \ No newline at end of file