From cf7851e1b1ef34df972da44fe07f054f57307edb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Bj=C3=A4reholt?= Date: Sun, 5 Apr 2020 11:44:09 +0200 Subject: [PATCH 01/19] chore: updated aw-server-rust --- aw-server-rust | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aw-server-rust b/aw-server-rust index 2b55a975..642a5315 160000 --- a/aw-server-rust +++ b/aw-server-rust @@ -1 +1 @@ -Subproject commit 2b55a97549429c4b570b28bd8d05396a22d8046e +Subproject commit 642a5315cd7ccbcb5aa24df73ce1b6096881616a From 5a6e81ae0d195ce934d5b3fd331dbb6d9b80a1c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Bj=C3=A4reholt?= Date: Sun, 5 Apr 2020 12:17:07 +0200 Subject: [PATCH 02/19] refactor: removed tv module --- settings.gradle | 2 +- tv/.gitignore | 1 - tv/build.gradle | 30 --- tv/proguard-rules.pro | 21 -- tv/src/main/AndroidManifest.xml | 37 --- .../android/BrowseErrorActivity.kt | 84 ------ .../activitywatch/android/CardPresenter.kt | 95 ------- .../activitywatch/android/DetailsActivity.kt | 34 --- .../android/DetailsDescriptionPresenter.kt | 31 --- .../activitywatch/android/ErrorFragment.kt | 44 ---- .../net/activitywatch/android/MainActivity.kt | 29 -- .../net/activitywatch/android/MainFragment.kt | 247 ------------------ .../java/net/activitywatch/android/Movie.kt | 45 ---- .../net/activitywatch/android/MovieList.kt | 108 -------- .../activitywatch/android/PlaybackActivity.kt | 31 --- .../android/PlaybackVideoFragment.kt | 53 ---- .../android/VideoDetailsFragment.kt | 233 ----------------- .../res/drawable/app_icon_your_company.png | Bin 12416 -> 0 bytes .../main/res/drawable/default_background.xml | 9 - tv/src/main/res/drawable/movie.png | Bin 13007 -> 0 bytes tv/src/main/res/layout/activity_details.xml | 9 - tv/src/main/res/layout/activity_main.xml | 10 - tv/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 2963 -> 0 bytes tv/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2060 -> 0 bytes tv/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4490 -> 0 bytes tv/src/main/res/mipmap-xxhdpi/ic_launcher.png | Bin 6387 -> 0 bytes tv/src/main/res/values/colors.xml | 8 - tv/src/main/res/values/strings.xml | 19 -- tv/src/main/res/values/styles.xml | 4 - 29 files changed, 1 insertion(+), 1183 deletions(-) delete mode 100644 tv/.gitignore delete mode 100644 tv/build.gradle delete mode 100644 tv/proguard-rules.pro delete mode 100644 tv/src/main/AndroidManifest.xml delete mode 100644 tv/src/main/java/net/activitywatch/android/BrowseErrorActivity.kt delete mode 100644 tv/src/main/java/net/activitywatch/android/CardPresenter.kt delete mode 100644 tv/src/main/java/net/activitywatch/android/DetailsActivity.kt delete mode 100644 tv/src/main/java/net/activitywatch/android/DetailsDescriptionPresenter.kt delete mode 100644 tv/src/main/java/net/activitywatch/android/ErrorFragment.kt delete mode 100644 tv/src/main/java/net/activitywatch/android/MainActivity.kt delete mode 100644 tv/src/main/java/net/activitywatch/android/MainFragment.kt delete mode 100644 tv/src/main/java/net/activitywatch/android/Movie.kt delete mode 100644 tv/src/main/java/net/activitywatch/android/MovieList.kt delete mode 100644 tv/src/main/java/net/activitywatch/android/PlaybackActivity.kt delete mode 100644 tv/src/main/java/net/activitywatch/android/PlaybackVideoFragment.kt delete mode 100644 tv/src/main/java/net/activitywatch/android/VideoDetailsFragment.kt delete mode 100644 tv/src/main/res/drawable/app_icon_your_company.png delete mode 100644 tv/src/main/res/drawable/default_background.xml delete mode 100644 tv/src/main/res/drawable/movie.png delete mode 100644 tv/src/main/res/layout/activity_details.xml delete mode 100644 tv/src/main/res/layout/activity_main.xml delete mode 100644 tv/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 tv/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 tv/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 tv/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 tv/src/main/res/values/colors.xml delete mode 100644 tv/src/main/res/values/strings.xml delete mode 100644 tv/src/main/res/values/styles.xml diff --git a/settings.gradle b/settings.gradle index b42e48ff..6070d9b3 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include ':mobile', ':tv' +include ':mobile' diff --git a/tv/.gitignore b/tv/.gitignore deleted file mode 100644 index 796b96d1..00000000 --- a/tv/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/tv/build.gradle b/tv/build.gradle deleted file mode 100644 index 2b005092..00000000 --- a/tv/build.gradle +++ /dev/null @@ -1,30 +0,0 @@ -apply plugin: 'com.android.application' - -apply plugin: 'kotlin-android' - -apply plugin: 'kotlin-android-extensions' - -android { - compileSdkVersion 27 - defaultConfig { - applicationId "net.activitywatch.android" - minSdkVersion 26 - targetSdkVersion 27 - versionCode 1 - versionName "1.0" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } -} - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation 'com.android.support:leanback-v17:27.1.1' - implementation 'com.android.support:appcompat-v7:27.1.1' - implementation 'com.github.bumptech.glide:glide:3.8.0' -} diff --git a/tv/proguard-rules.pro b/tv/proguard-rules.pro deleted file mode 100644 index f1b42451..00000000 --- a/tv/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/tv/src/main/AndroidManifest.xml b/tv/src/main/AndroidManifest.xml deleted file mode 100644 index ede6c316..00000000 --- a/tv/src/main/AndroidManifest.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tv/src/main/java/net/activitywatch/android/BrowseErrorActivity.kt b/tv/src/main/java/net/activitywatch/android/BrowseErrorActivity.kt deleted file mode 100644 index abaacb75..00000000 --- a/tv/src/main/java/net/activitywatch/android/BrowseErrorActivity.kt +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * 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 net.activitywatch.android - -import android.app.Activity -import android.app.Fragment -import android.os.Bundle -import android.os.Handler -import android.view.Gravity -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.FrameLayout -import android.widget.ProgressBar - -/** - * BrowseErrorActivity shows how to use ErrorFragment. - */ -class BrowseErrorActivity : Activity() { - - private lateinit var mErrorFragment: ErrorFragment - private lateinit var mSpinnerFragment: SpinnerFragment - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - - testError() - } - - private fun testError() { - mErrorFragment = ErrorFragment() - fragmentManager - .beginTransaction() - .add(R.id.main_browse_fragment, mErrorFragment) - .commit() - - mSpinnerFragment = SpinnerFragment() - fragmentManager - .beginTransaction() - .add(R.id.main_browse_fragment, mSpinnerFragment) - .commit() - - val handler = Handler() - handler.postDelayed({ - fragmentManager - .beginTransaction() - .remove(mSpinnerFragment) - .commit() - mErrorFragment.setErrorContent() - }, TIMER_DELAY) - } - - class SpinnerFragment : Fragment() { - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - val progressBar = ProgressBar(container?.context) - if (container is FrameLayout) { - val layoutParams = FrameLayout.LayoutParams(SPINNER_WIDTH, SPINNER_HEIGHT, Gravity.CENTER) - progressBar.layoutParams = layoutParams - } - return progressBar - } - } - - companion object { - private val TIMER_DELAY = 3000L - private val SPINNER_WIDTH = 100 - private val SPINNER_HEIGHT = 100 - } -} \ No newline at end of file diff --git a/tv/src/main/java/net/activitywatch/android/CardPresenter.kt b/tv/src/main/java/net/activitywatch/android/CardPresenter.kt deleted file mode 100644 index 3caedad2..00000000 --- a/tv/src/main/java/net/activitywatch/android/CardPresenter.kt +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * 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 net.activitywatch.android - -import android.graphics.drawable.Drawable -import android.support.v17.leanback.widget.ImageCardView -import android.support.v17.leanback.widget.Presenter -import android.support.v4.content.ContextCompat -import android.util.Log -import android.view.ViewGroup - -import com.bumptech.glide.Glide -import kotlin.properties.Delegates - -/** - * A CardPresenter is used to generate Views and bind Objects to them on demand. - * It contains an ImageCardView. - */ -class CardPresenter : Presenter() { - private var mDefaultCardImage: Drawable? = null - private var sSelectedBackgroundColor: Int by Delegates.notNull() - private var sDefaultBackgroundColor: Int by Delegates.notNull() - - override fun onCreateViewHolder(parent: ViewGroup): Presenter.ViewHolder { - Log.d(TAG, "onCreateViewHolder") - - sDefaultBackgroundColor = ContextCompat.getColor(parent.context, R.color.default_background) - sSelectedBackgroundColor = ContextCompat.getColor(parent.context, R.color.selected_background) - mDefaultCardImage = ContextCompat.getDrawable(parent.context, R.drawable.movie) - - val cardView = object : ImageCardView(parent.context) { - override fun setSelected(selected: Boolean) { - updateCardBackgroundColor(this, selected) - super.setSelected(selected) - } - } - - cardView.isFocusable = true - cardView.isFocusableInTouchMode = true - updateCardBackgroundColor(cardView, false) - return Presenter.ViewHolder(cardView) - } - - override fun onBindViewHolder(viewHolder: Presenter.ViewHolder, item: Any) { - val movie = item as Movie - val cardView = viewHolder.view as ImageCardView - - Log.d(TAG, "onBindViewHolder") - if (movie.cardImageUrl != null) { - cardView.titleText = movie.title - cardView.contentText = movie.studio - cardView.setMainImageDimensions(CARD_WIDTH, CARD_HEIGHT) - Glide.with(viewHolder.view.context) - .load(movie.cardImageUrl) - .centerCrop() - .error(mDefaultCardImage) - .into(cardView.mainImageView) - } - } - - override fun onUnbindViewHolder(viewHolder: Presenter.ViewHolder) { - Log.d(TAG, "onUnbindViewHolder") - val cardView = viewHolder.view as ImageCardView - // Remove references to images so that the garbage collector can free up memory - cardView.badgeImage = null - cardView.mainImage = null - } - - private fun updateCardBackgroundColor(view: ImageCardView, selected: Boolean) { - val color = if (selected) sSelectedBackgroundColor else sDefaultBackgroundColor - // Both background colors should be set because the view's background is temporarily visible - // during animations. - view.setBackgroundColor(color) - view.setInfoAreaBackgroundColor(color) - } - - companion object { - private val TAG = "CardPresenter" - - private val CARD_WIDTH = 313 - private val CARD_HEIGHT = 176 - } -} diff --git a/tv/src/main/java/net/activitywatch/android/DetailsActivity.kt b/tv/src/main/java/net/activitywatch/android/DetailsActivity.kt deleted file mode 100644 index 3a9fc4aa..00000000 --- a/tv/src/main/java/net/activitywatch/android/DetailsActivity.kt +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * 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 net.activitywatch.android - -import android.app.Activity -import android.os.Bundle - -/** - * Details activity class that loads [VideoDetailsFragment] class. - */ -class DetailsActivity : Activity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_details) - } - - companion object { - const val SHARED_ELEMENT_NAME = "hero" - const val MOVIE = "Movie" - } -} diff --git a/tv/src/main/java/net/activitywatch/android/DetailsDescriptionPresenter.kt b/tv/src/main/java/net/activitywatch/android/DetailsDescriptionPresenter.kt deleted file mode 100644 index 452b2116..00000000 --- a/tv/src/main/java/net/activitywatch/android/DetailsDescriptionPresenter.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * 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 net.activitywatch.android - -import android.support.v17.leanback.widget.AbstractDetailsDescriptionPresenter - -class DetailsDescriptionPresenter : AbstractDetailsDescriptionPresenter() { - - override fun onBindDescription( - viewHolder: AbstractDetailsDescriptionPresenter.ViewHolder, - item: Any - ) { - val movie = item as Movie - - viewHolder.title.text = movie.title - viewHolder.subtitle.text = movie.studio - viewHolder.body.text = movie.description - } -} \ No newline at end of file diff --git a/tv/src/main/java/net/activitywatch/android/ErrorFragment.kt b/tv/src/main/java/net/activitywatch/android/ErrorFragment.kt deleted file mode 100644 index 19b17498..00000000 --- a/tv/src/main/java/net/activitywatch/android/ErrorFragment.kt +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * 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 net.activitywatch.android - -import android.os.Bundle -import android.support.v4.content.ContextCompat -import android.view.View - -/** - * This class demonstrates how to extend [android.support.v17.leanback.app.ErrorFragment]. - */ -class ErrorFragment : android.support.v17.leanback.app.ErrorFragment() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - title = resources.getString(R.string.app_name) - } - - internal fun setErrorContent() { - imageDrawable = ContextCompat.getDrawable(context, R.drawable.lb_ic_sad_cloud) - message = resources.getString(R.string.error_fragment_message) - setDefaultBackground(TRANSLUCENT) - - buttonText = resources.getString(R.string.dismiss_error) - buttonClickListener = View.OnClickListener { - fragmentManager.beginTransaction().remove(this@ErrorFragment).commit() - } - } - - companion object { - private val TRANSLUCENT = true - } -} \ No newline at end of file diff --git a/tv/src/main/java/net/activitywatch/android/MainActivity.kt b/tv/src/main/java/net/activitywatch/android/MainActivity.kt deleted file mode 100644 index 21a96854..00000000 --- a/tv/src/main/java/net/activitywatch/android/MainActivity.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * 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 net.activitywatch.android - -import android.app.Activity -import android.os.Bundle - -/** - * Loads [MainFragment]. - */ -class MainActivity : Activity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - } -} diff --git a/tv/src/main/java/net/activitywatch/android/MainFragment.kt b/tv/src/main/java/net/activitywatch/android/MainFragment.kt deleted file mode 100644 index a8a875c1..00000000 --- a/tv/src/main/java/net/activitywatch/android/MainFragment.kt +++ /dev/null @@ -1,247 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * 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 net.activitywatch.android - -import java.util.Collections -import java.util.Timer -import java.util.TimerTask - -import android.content.Intent -import android.graphics.Color -import android.graphics.drawable.Drawable -import android.os.Bundle -import android.os.Handler -import android.support.v17.leanback.app.BackgroundManager -import android.support.v17.leanback.app.BrowseFragment -import android.support.v17.leanback.widget.ArrayObjectAdapter -import android.support.v17.leanback.widget.HeaderItem -import android.support.v17.leanback.widget.ImageCardView -import android.support.v17.leanback.widget.ListRow -import android.support.v17.leanback.widget.ListRowPresenter -import android.support.v17.leanback.widget.OnItemViewClickedListener -import android.support.v17.leanback.widget.OnItemViewSelectedListener -import android.support.v17.leanback.widget.Presenter -import android.support.v17.leanback.widget.Row -import android.support.v17.leanback.widget.RowPresenter -import android.support.v4.app.ActivityOptionsCompat -import android.support.v4.content.ContextCompat -import android.util.DisplayMetrics -import android.util.Log -import android.view.Gravity -import android.view.ViewGroup -import android.widget.TextView -import android.widget.Toast - -import com.bumptech.glide.Glide -import com.bumptech.glide.load.resource.drawable.GlideDrawable -import com.bumptech.glide.request.animation.GlideAnimation -import com.bumptech.glide.request.target.SimpleTarget - -/** - * Loads a grid of cards with movies to browse. - */ -class MainFragment : BrowseFragment() { - - private val mHandler = Handler() - private lateinit var mBackgroundManager: BackgroundManager - private var mDefaultBackground: Drawable? = null - private lateinit var mMetrics: DisplayMetrics - private var mBackgroundTimer: Timer? = null - private var mBackgroundUri: String? = null - - override fun onActivityCreated(savedInstanceState: Bundle?) { - Log.i(TAG, "onCreate") - super.onActivityCreated(savedInstanceState) - - prepareBackgroundManager() - - setupUIElements() - - loadRows() - - setupEventListeners() - } - - override fun onDestroy() { - super.onDestroy() - Log.d(TAG, "onDestroy: " + mBackgroundTimer?.toString()) - mBackgroundTimer?.cancel() - } - - private fun prepareBackgroundManager() { - - mBackgroundManager = BackgroundManager.getInstance(activity) - mBackgroundManager.attach(activity.window) - mDefaultBackground = ContextCompat.getDrawable(context, R.drawable.default_background) - mMetrics = DisplayMetrics() - activity.windowManager.defaultDisplay.getMetrics(mMetrics) - } - - private fun setupUIElements() { - title = getString(R.string.browse_title) - // over title - headersState = BrowseFragment.HEADERS_ENABLED - isHeadersTransitionOnBackEnabled = true - - // set fastLane (or headers) background color - brandColor = ContextCompat.getColor(context, R.color.fastlane_background) - // set search icon color - searchAffordanceColor = ContextCompat.getColor(context, R.color.search_opaque) - } - - private fun loadRows() { - val list = MovieList.list - - val rowsAdapter = ArrayObjectAdapter(ListRowPresenter()) - val cardPresenter = CardPresenter() - - for (i in 0 until NUM_ROWS) { - if (i != 0) { - Collections.shuffle(list) - } - val listRowAdapter = ArrayObjectAdapter(cardPresenter) - for (j in 0 until NUM_COLS) { - listRowAdapter.add(list[j % 5]) - } - val header = HeaderItem(i.toLong(), MovieList.MOVIE_CATEGORY[i]) - rowsAdapter.add(ListRow(header, listRowAdapter)) - } - - val gridHeader = HeaderItem(NUM_ROWS.toLong(), "PREFERENCES") - - val mGridPresenter = GridItemPresenter() - val gridRowAdapter = ArrayObjectAdapter(mGridPresenter) - gridRowAdapter.add(resources.getString(R.string.grid_view)) - gridRowAdapter.add(getString(R.string.error_fragment)) - gridRowAdapter.add(resources.getString(R.string.personal_settings)) - rowsAdapter.add(ListRow(gridHeader, gridRowAdapter)) - - adapter = rowsAdapter - } - - private fun setupEventListeners() { - setOnSearchClickedListener { - Toast.makeText(context, "Implement your own in-app search", Toast.LENGTH_LONG) - .show() - } - - onItemViewClickedListener = ItemViewClickedListener() - onItemViewSelectedListener = ItemViewSelectedListener() - } - - private inner class ItemViewClickedListener : OnItemViewClickedListener { - override fun onItemClicked( - itemViewHolder: Presenter.ViewHolder, - item: Any, - rowViewHolder: RowPresenter.ViewHolder, - row: Row - ) { - - if (item is Movie) { - Log.d(TAG, "Item: " + item.toString()) - val intent = Intent(context, DetailsActivity::class.java) - intent.putExtra(DetailsActivity.MOVIE, item) - - val bundle = ActivityOptionsCompat.makeSceneTransitionAnimation( - activity, - (itemViewHolder.view as ImageCardView).mainImageView, - DetailsActivity.SHARED_ELEMENT_NAME - ) - .toBundle() - activity.startActivity(intent, bundle) - } else if (item is String) { - if (item.contains(getString(R.string.error_fragment))) { - val intent = Intent(context, BrowseErrorActivity::class.java) - startActivity(intent) - } else { - Toast.makeText(context, item, Toast.LENGTH_SHORT).show() - } - } - } - } - - private inner class ItemViewSelectedListener : OnItemViewSelectedListener { - override fun onItemSelected( - itemViewHolder: Presenter.ViewHolder?, item: Any?, - rowViewHolder: RowPresenter.ViewHolder, row: Row - ) { - if (item is Movie) { - mBackgroundUri = item.backgroundImageUrl - startBackgroundTimer() - } - } - } - - private fun updateBackground(uri: String?) { - val width = mMetrics.widthPixels - val height = mMetrics.heightPixels - Glide.with(context) - .load(uri) - .centerCrop() - .error(mDefaultBackground) - .into>( - object : SimpleTarget(width, height) { - override fun onResourceReady( - resource: GlideDrawable, - glideAnimation: GlideAnimation - ) { - mBackgroundManager.drawable = resource - } - }) - mBackgroundTimer?.cancel() - } - - private fun startBackgroundTimer() { - mBackgroundTimer?.cancel() - mBackgroundTimer = Timer() - mBackgroundTimer?.schedule(UpdateBackgroundTask(), BACKGROUND_UPDATE_DELAY.toLong()) - } - - private inner class UpdateBackgroundTask : TimerTask() { - - override fun run() { - mHandler.post { updateBackground(mBackgroundUri) } - } - } - - private inner class GridItemPresenter : Presenter() { - override fun onCreateViewHolder(parent: ViewGroup): Presenter.ViewHolder { - val view = TextView(parent.context) - view.layoutParams = ViewGroup.LayoutParams(GRID_ITEM_WIDTH, GRID_ITEM_HEIGHT) - view.isFocusable = true - view.isFocusableInTouchMode = true - view.setBackgroundColor(ContextCompat.getColor(context, R.color.default_background)) - view.setTextColor(Color.WHITE) - view.gravity = Gravity.CENTER - return Presenter.ViewHolder(view) - } - - override fun onBindViewHolder(viewHolder: Presenter.ViewHolder, item: Any) { - (viewHolder.view as TextView).text = item as String - } - - override fun onUnbindViewHolder(viewHolder: Presenter.ViewHolder) {} - } - - companion object { - private val TAG = "MainFragment" - - private val BACKGROUND_UPDATE_DELAY = 300 - private val GRID_ITEM_WIDTH = 200 - private val GRID_ITEM_HEIGHT = 200 - private val NUM_ROWS = 6 - private val NUM_COLS = 15 - } -} diff --git a/tv/src/main/java/net/activitywatch/android/Movie.kt b/tv/src/main/java/net/activitywatch/android/Movie.kt deleted file mode 100644 index d9e7007f..00000000 --- a/tv/src/main/java/net/activitywatch/android/Movie.kt +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * 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 net.activitywatch.android - -import java.io.Serializable - -/** - * Movie class represents video entity with title, description, image thumbs and video url. - */ -data class Movie( - var id: Long = 0, - var title: String? = null, - var description: String? = null, - var backgroundImageUrl: String? = null, - var cardImageUrl: String? = null, - var videoUrl: String? = null, - var studio: String? = null -) : Serializable { - - override fun toString(): String { - return "Movie{" + - "id=" + id + - ", title='" + title + '\'' + - ", videoUrl='" + videoUrl + '\'' + - ", backgroundImageUrl='" + backgroundImageUrl + '\'' + - ", cardImageUrl='" + cardImageUrl + '\'' + - '}' - } - - companion object { - internal const val serialVersionUID = 727566175075960653L - } -} diff --git a/tv/src/main/java/net/activitywatch/android/MovieList.kt b/tv/src/main/java/net/activitywatch/android/MovieList.kt deleted file mode 100644 index 3f769a63..00000000 --- a/tv/src/main/java/net/activitywatch/android/MovieList.kt +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * 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 net.activitywatch.android - -object MovieList { - val MOVIE_CATEGORY = arrayOf( - "Category Zero", - "Category One", - "Category Two", - "Category Three", - "Category Four", - "Category Five" - ) - - val list: List by lazy { - setupMovies() - } - private var count: Long = 0 - - private fun setupMovies(): List { - val title = arrayOf( - "Zeitgeist 2010_ Year in Review", - "Google Demo Slam_ 20ft Search", - "Introducing Gmail Blue", - "Introducing Google Fiber to the Pole", - "Introducing Google Nose" - ) - - val description = "Fusce id nisi turpis. Praesent viverra bibendum semper. " + - "Donec tristique, orci sed semper lacinia, quam erat rhoncus massa, non congue tellus est " + - "quis tellus. Sed mollis orci venenatis quam scelerisque accumsan. Curabitur a massa sit " + - "amet mi accumsan mollis sed et magna. Vivamus sed aliquam risus. Nulla eget dolor in elit " + - "facilisis mattis. Ut aliquet luctus lacus. Phasellus nec commodo erat. Praesent tempus id " + - "lectus ac scelerisque. Maecenas pretium cursus lectus id volutpat." - val studio = arrayOf( - "Studio Zero", - "Studio One", - "Studio Two", - "Studio Three", - "Studio Four" - ) - val videoUrl = arrayOf( - "http://commondatastorage.googleapis.com/android-tv/Sample%20videos/Zeitgeist/Zeitgeist%202010_%20Year%20in%20Review.mp4", - "http://commondatastorage.googleapis.com/android-tv/Sample%20videos/Demo%20Slam/Google%20Demo%20Slam_%2020ft%20Search.mp4", - "http://commondatastorage.googleapis.com/android-tv/Sample%20videos/April%20Fool's%202013/Introducing%20Gmail%20Blue.mp4", - "http://commondatastorage.googleapis.com/android-tv/Sample%20videos/April%20Fool's%202013/Introducing%20Google%20Fiber%20to%20the%20Pole.mp4", - "http://commondatastorage.googleapis.com/android-tv/Sample%20videos/April%20Fool's%202013/Introducing%20Google%20Nose.mp4" - ) - val bgImageUrl = arrayOf( - "http://commondatastorage.googleapis.com/android-tv/Sample%20videos/Zeitgeist/Zeitgeist%202010_%20Year%20in%20Review/bg.jpg", - "http://commondatastorage.googleapis.com/android-tv/Sample%20videos/Demo%20Slam/Google%20Demo%20Slam_%2020ft%20Search/bg.jpg", - "http://commondatastorage.googleapis.com/android-tv/Sample%20videos/April%20Fool's%202013/Introducing%20Gmail%20Blue/bg.jpg", - "http://commondatastorage.googleapis.com/android-tv/Sample%20videos/April%20Fool's%202013/Introducing%20Google%20Fiber%20to%20the%20Pole/bg.jpg", - "http://commondatastorage.googleapis.com/android-tv/Sample%20videos/April%20Fool's%202013/Introducing%20Google%20Nose/bg.jpg" - ) - val cardImageUrl = arrayOf( - "http://commondatastorage.googleapis.com/android-tv/Sample%20videos/Zeitgeist/Zeitgeist%202010_%20Year%20in%20Review/card.jpg", - "http://commondatastorage.googleapis.com/android-tv/Sample%20videos/Demo%20Slam/Google%20Demo%20Slam_%2020ft%20Search/card.jpg", - "http://commondatastorage.googleapis.com/android-tv/Sample%20videos/April%20Fool's%202013/Introducing%20Gmail%20Blue/card.jpg", - "http://commondatastorage.googleapis.com/android-tv/Sample%20videos/April%20Fool's%202013/Introducing%20Google%20Fiber%20to%20the%20Pole/card.jpg", - "http://commondatastorage.googleapis.com/android-tv/Sample%20videos/April%20Fool's%202013/Introducing%20Google%20Nose/card.jpg" - ) - - val list = title.indices.map { - buildMovieInfo( - title[it], - description, - studio[it], - videoUrl[it], - cardImageUrl[it], - bgImageUrl[it] - ) - } - - return list - } - - private fun buildMovieInfo( - title: String, - description: String, - studio: String, - videoUrl: String, - cardImageUrl: String, - backgroundImageUrl: String - ): Movie { - val movie = Movie() - movie.id = count++ - movie.title = title - movie.description = description - movie.studio = studio - movie.cardImageUrl = cardImageUrl - movie.backgroundImageUrl = backgroundImageUrl - movie.videoUrl = videoUrl - return movie - } -} \ No newline at end of file diff --git a/tv/src/main/java/net/activitywatch/android/PlaybackActivity.kt b/tv/src/main/java/net/activitywatch/android/PlaybackActivity.kt deleted file mode 100644 index f5a989b9..00000000 --- a/tv/src/main/java/net/activitywatch/android/PlaybackActivity.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * 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 net.activitywatch.android - -import android.os.Bundle -import android.support.v4.app.FragmentActivity - -/** Loads [PlaybackVideoFragment]. */ -class PlaybackActivity : FragmentActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - if (savedInstanceState == null) { - supportFragmentManager.beginTransaction() - .replace(android.R.id.content, PlaybackVideoFragment()) - .commit() - } - } -} \ No newline at end of file diff --git a/tv/src/main/java/net/activitywatch/android/PlaybackVideoFragment.kt b/tv/src/main/java/net/activitywatch/android/PlaybackVideoFragment.kt deleted file mode 100644 index 36f8800f..00000000 --- a/tv/src/main/java/net/activitywatch/android/PlaybackVideoFragment.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * 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 net.activitywatch.android - -import android.net.Uri -import android.os.Bundle -import android.support.v17.leanback.app.VideoSupportFragment -import android.support.v17.leanback.app.VideoSupportFragmentGlueHost -import android.support.v17.leanback.media.MediaPlayerAdapter -import android.support.v17.leanback.media.PlaybackTransportControlGlue -import android.support.v17.leanback.widget.PlaybackControlsRow - -/** Handles video playback with media controls. */ -class PlaybackVideoFragment : VideoSupportFragment() { - - private lateinit var mTransportControlGlue: PlaybackTransportControlGlue - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - val (_, title, description, _, _, videoUrl) = - activity?.intent?.getSerializableExtra(DetailsActivity.MOVIE) as Movie - - val glueHost = VideoSupportFragmentGlueHost(this@PlaybackVideoFragment) - val playerAdapter = MediaPlayerAdapter(context) - playerAdapter.setRepeatAction(PlaybackControlsRow.RepeatAction.INDEX_NONE) - - mTransportControlGlue = PlaybackTransportControlGlue(getActivity(), playerAdapter) - mTransportControlGlue.host = glueHost - mTransportControlGlue.title = title - mTransportControlGlue.subtitle = description - mTransportControlGlue.playWhenPrepared() - - playerAdapter.setDataSource(Uri.parse(videoUrl)) - } - - override fun onPause() { - super.onPause() - mTransportControlGlue.pause() - } -} \ No newline at end of file diff --git a/tv/src/main/java/net/activitywatch/android/VideoDetailsFragment.kt b/tv/src/main/java/net/activitywatch/android/VideoDetailsFragment.kt deleted file mode 100644 index ae1decfe..00000000 --- a/tv/src/main/java/net/activitywatch/android/VideoDetailsFragment.kt +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * 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 net.activitywatch.android - -import android.content.Context -import android.content.Intent -import android.graphics.Bitmap -import android.os.Bundle -import android.support.v17.leanback.app.DetailsFragment -import android.support.v17.leanback.app.DetailsFragmentBackgroundController -import android.support.v17.leanback.widget.Action -import android.support.v17.leanback.widget.ArrayObjectAdapter -import android.support.v17.leanback.widget.ClassPresenterSelector -import android.support.v17.leanback.widget.DetailsOverviewRow -import android.support.v17.leanback.widget.FullWidthDetailsOverviewRowPresenter -import android.support.v17.leanback.widget.FullWidthDetailsOverviewSharedElementHelper -import android.support.v17.leanback.widget.HeaderItem -import android.support.v17.leanback.widget.ImageCardView -import android.support.v17.leanback.widget.ListRow -import android.support.v17.leanback.widget.ListRowPresenter -import android.support.v17.leanback.widget.OnActionClickedListener -import android.support.v17.leanback.widget.OnItemViewClickedListener -import android.support.v17.leanback.widget.Presenter -import android.support.v17.leanback.widget.Row -import android.support.v17.leanback.widget.RowPresenter -import android.support.v4.app.ActivityOptionsCompat -import android.support.v4.content.ContextCompat -import android.util.Log -import android.widget.Toast - -import com.bumptech.glide.Glide -import com.bumptech.glide.load.resource.drawable.GlideDrawable -import com.bumptech.glide.request.animation.GlideAnimation -import com.bumptech.glide.request.target.SimpleTarget - -import java.util.Collections - -/** - * A wrapper fragment for leanback details screens. - * It shows a detailed view of video and its metadata plus related videos. - */ -class VideoDetailsFragment : DetailsFragment() { - - private var mSelectedMovie: Movie? = null - - private lateinit var mDetailsBackground: DetailsFragmentBackgroundController - private lateinit var mPresenterSelector: ClassPresenterSelector - private lateinit var mAdapter: ArrayObjectAdapter - - override fun onCreate(savedInstanceState: Bundle?) { - Log.d(TAG, "onCreate DetailsFragment") - super.onCreate(savedInstanceState) - - mDetailsBackground = DetailsFragmentBackgroundController(this) - - mSelectedMovie = activity.intent.getSerializableExtra(DetailsActivity.MOVIE) as Movie - if (mSelectedMovie != null) { - mPresenterSelector = ClassPresenterSelector() - mAdapter = ArrayObjectAdapter(mPresenterSelector) - setupDetailsOverviewRow() - setupDetailsOverviewRowPresenter() - setupRelatedMovieListRow() - adapter = mAdapter - initializeBackground(mSelectedMovie) - onItemViewClickedListener = ItemViewClickedListener() - } else { - val intent = Intent(context, MainActivity::class.java) - startActivity(intent) - } - } - - private fun initializeBackground(movie: Movie?) { - mDetailsBackground.enableParallax() - Glide.with(context) - .load(movie?.backgroundImageUrl) - .asBitmap() - .centerCrop() - .error(R.drawable.default_background) - .into>(object : SimpleTarget() { - override fun onResourceReady( - bitmap: Bitmap, - glideAnimation: GlideAnimation - ) { - mDetailsBackground.coverBitmap = bitmap - mAdapter.notifyArrayItemRangeChanged(0, mAdapter.size()) - } - }) - } - - private fun setupDetailsOverviewRow() { - Log.d(TAG, "doInBackground: " + mSelectedMovie?.toString()) - val row = DetailsOverviewRow(mSelectedMovie) - row.imageDrawable = ContextCompat.getDrawable(context, R.drawable.default_background) - val width = convertDpToPixel(context, DETAIL_THUMB_WIDTH) - val height = convertDpToPixel(context, DETAIL_THUMB_HEIGHT) - Glide.with(context) - .load(mSelectedMovie?.cardImageUrl) - .centerCrop() - .error(R.drawable.default_background) - .into>(object : SimpleTarget(width, height) { - override fun onResourceReady( - resource: GlideDrawable, - glideAnimation: GlideAnimation - ) { - Log.d(TAG, "details overview card image url ready: " + resource) - row.imageDrawable = resource - mAdapter.notifyArrayItemRangeChanged(0, mAdapter.size()) - } - }) - - val actionAdapter = ArrayObjectAdapter() - - actionAdapter.add( - Action( - ACTION_WATCH_TRAILER, - resources.getString(R.string.watch_trailer_1), - resources.getString(R.string.watch_trailer_2) - ) - ) - actionAdapter.add( - Action( - ACTION_RENT, - resources.getString(R.string.rent_1), - resources.getString(R.string.rent_2) - ) - ) - actionAdapter.add( - Action( - ACTION_BUY, - resources.getString(R.string.buy_1), - resources.getString(R.string.buy_2) - ) - ) - row.actionsAdapter = actionAdapter - - mAdapter.add(row) - } - - private fun setupDetailsOverviewRowPresenter() { - // Set detail background. - val detailsPresenter = FullWidthDetailsOverviewRowPresenter(DetailsDescriptionPresenter()) - detailsPresenter.backgroundColor = - ContextCompat.getColor(context, R.color.selected_background) - - // Hook up transition element. - val sharedElementHelper = FullWidthDetailsOverviewSharedElementHelper() - sharedElementHelper.setSharedElementEnterTransition( - activity, DetailsActivity.SHARED_ELEMENT_NAME - ) - detailsPresenter.setListener(sharedElementHelper) - detailsPresenter.isParticipatingEntranceTransition = true - - detailsPresenter.onActionClickedListener = OnActionClickedListener { action -> - if (action.id == ACTION_WATCH_TRAILER) { - val intent = Intent(context, PlaybackActivity::class.java) - intent.putExtra(DetailsActivity.MOVIE, mSelectedMovie) - startActivity(intent) - } else { - Toast.makeText(context, action.toString(), Toast.LENGTH_SHORT).show() - } - } - mPresenterSelector.addClassPresenter(DetailsOverviewRow::class.java, detailsPresenter) - } - - private fun setupRelatedMovieListRow() { - val subcategories = arrayOf(getString(R.string.related_movies)) - val list = MovieList.list - - Collections.shuffle(list) - val listRowAdapter = ArrayObjectAdapter(CardPresenter()) - for (j in 0 until NUM_COLS) { - listRowAdapter.add(list[j % 5]) - } - - val header = HeaderItem(0, subcategories[0]) - mAdapter.add(ListRow(header, listRowAdapter)) - mPresenterSelector.addClassPresenter(ListRow::class.java, ListRowPresenter()) - } - - private fun convertDpToPixel(context: Context, dp: Int): Int { - val density = context.applicationContext.resources.displayMetrics.density - return Math.round(dp.toFloat() * density) - } - - private inner class ItemViewClickedListener : OnItemViewClickedListener { - override fun onItemClicked( - itemViewHolder: Presenter.ViewHolder?, - item: Any?, - rowViewHolder: RowPresenter.ViewHolder, - row: Row - ) { - if (item is Movie) { - Log.d(TAG, "Item: " + item.toString()) - val intent = Intent(context, DetailsActivity::class.java) - intent.putExtra(resources.getString(R.string.movie), mSelectedMovie) - - val bundle = - ActivityOptionsCompat.makeSceneTransitionAnimation( - activity, - (itemViewHolder?.view as ImageCardView).mainImageView, - DetailsActivity.SHARED_ELEMENT_NAME - ) - .toBundle() - activity.startActivity(intent, bundle) - } - } - } - - companion object { - private val TAG = "VideoDetailsFragment" - - private val ACTION_WATCH_TRAILER = 1L - private val ACTION_RENT = 2L - private val ACTION_BUY = 3L - - private val DETAIL_THUMB_WIDTH = 274 - private val DETAIL_THUMB_HEIGHT = 274 - - private val NUM_COLS = 10 - } -} \ No newline at end of file diff --git a/tv/src/main/res/drawable/app_icon_your_company.png b/tv/src/main/res/drawable/app_icon_your_company.png deleted file mode 100644 index 0a47b018cc8d6d966550f5d150d349b82924152e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12416 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%0DEM-T&5TI`z-OkKZ$poBEYA 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 V(Xagh_+J6gI~gVEa!KRh{{r^yYhC~V diff --git a/tv/src/main/res/drawable/default_background.xml b/tv/src/main/res/drawable/default_background.xml deleted file mode 100644 index 68e9ffd1..00000000 --- a/tv/src/main/res/drawable/default_background.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - \ No newline at end of file diff --git a/tv/src/main/res/drawable/movie.png b/tv/src/main/res/drawable/movie.png deleted file mode 100644 index cb5cb6d390be45afc839df3db089ed29c9de5dd2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13007 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 - \ No newline at end of file diff --git a/tv/src/main/res/layout/activity_main.xml b/tv/src/main/res/layout/activity_main.xml deleted file mode 100644 index d57d1a29..00000000 --- a/tv/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,10 +0,0 @@ - - \ No newline at end of file diff --git a/tv/src/main/res/mipmap-hdpi/ic_launcher.png b/tv/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 898f3ed59ac9f3248734a00e5902736c9367d455..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2963 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 JPDHLkV1g@XpTGbB diff --git a/tv/src/main/res/mipmap-mdpi/ic_launcher.png b/tv/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 64ba76f75e9ce021aa3d95c213491f73bcacb597..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2060 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 diff --git a/tv/src/main/res/mipmap-xxhdpi/ic_launcher.png b/tv/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index b0907cac3bfd8fbfdc46e1108247f0a1055387ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6387 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 diff --git a/tv/src/main/res/values/colors.xml b/tv/src/main/res/values/colors.xml deleted file mode 100644 index 6a9252f5..00000000 --- a/tv/src/main/res/values/colors.xml +++ /dev/null @@ -1,8 +0,0 @@ - - #000000 - #DDDDDD - #0096a6 - #ffaa3f - #ffaa3f - #3d3d3d - diff --git a/tv/src/main/res/values/strings.xml b/tv/src/main/res/values/strings.xml deleted file mode 100644 index 7270d07b..00000000 --- a/tv/src/main/res/values/strings.xml +++ /dev/null @@ -1,19 +0,0 @@ - - ActivityWatch - - Related Videos - Grid View - Error Fragment - Personal Settings - Watch trailer - FREE - Rent By Day - From $1.99 - Buy and Own - AT $9.99 - Movie - - - An error occurred - Dismiss - diff --git a/tv/src/main/res/values/styles.xml b/tv/src/main/res/values/styles.xml deleted file mode 100644 index 10ec6a5f..00000000 --- a/tv/src/main/res/values/styles.xml +++ /dev/null @@ -1,4 +0,0 @@ - - -