From d1c3d9febebf1088c9ce993dc5c205da68214c8e Mon Sep 17 00:00:00 2001 From: Dan Nizri Date: Wed, 15 Jul 2020 11:50:30 -0400 Subject: [PATCH 01/23] [Reply] Clean up navigation graph xml (#50) --- .../src/main/res/navigation/navigation_graph.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Reply/app/src/main/res/navigation/navigation_graph.xml b/Reply/app/src/main/res/navigation/navigation_graph.xml index c0ea18dc..099a4db3 100644 --- a/Reply/app/src/main/res/navigation/navigation_graph.xml +++ b/Reply/app/src/main/res/navigation/navigation_graph.xml @@ -13,7 +13,8 @@ the License. --> + - - - \ No newline at end of file + From d2558bbc35d469169999b8e4de284ddb77b6acde Mon Sep 17 00:00:00 2001 From: Dan Nizri Date: Fri, 17 Jul 2020 10:58:39 -0400 Subject: [PATCH 02/23] [Reply] Update MDC dependency to 1.2.0-rc01 and use MaterialElevationScale (#51) --- Reply/app/build.gradle | 2 +- .../materialstudies/reply/ui/MainActivity.kt | 6 +-- .../reply/ui/home/HomeFragment.kt | 6 +-- .../reply/util/TransitionUtils.kt | 39 ------------------- 4 files changed, 7 insertions(+), 46 deletions(-) delete mode 100644 Reply/app/src/main/java/com/materialstudies/reply/util/TransitionUtils.kt diff --git a/Reply/app/build.gradle b/Reply/app/build.gradle index f03f0b23..6a5fec94 100644 --- a/Reply/app/build.gradle +++ b/Reply/app/build.gradle @@ -65,7 +65,7 @@ dependencies { implementation "com.github.bumptech.glide:glide:4.9.0" // Material Components - implementation 'com.google.android.material:material:1.2.0-beta01' + implementation 'com.google.android.material:material:1.2.0-rc01' // Testing testImplementation 'junit:junit:4.12' diff --git a/Reply/app/src/main/java/com/materialstudies/reply/ui/MainActivity.kt b/Reply/app/src/main/java/com/materialstudies/reply/ui/MainActivity.kt index b7096663..4dceb3de 100644 --- a/Reply/app/src/main/java/com/materialstudies/reply/ui/MainActivity.kt +++ b/Reply/app/src/main/java/com/materialstudies/reply/ui/MainActivity.kt @@ -30,6 +30,7 @@ import androidx.fragment.app.Fragment import androidx.navigation.NavController import androidx.navigation.NavDestination import androidx.navigation.findNavController +import com.google.android.material.transition.MaterialElevationScale import com.google.android.material.transition.MaterialFadeThrough import com.google.android.material.transition.MaterialSharedAxis import com.materialstudies.reply.R @@ -49,7 +50,6 @@ import com.materialstudies.reply.ui.nav.NavigationModelItem import com.materialstudies.reply.ui.nav.ShowHideFabStateAction import com.materialstudies.reply.ui.search.SearchFragmentDirections import com.materialstudies.reply.util.contentView -import com.materialstudies.reply.util.createMaterialElevationScale import kotlin.LazyThreadSafetyMode.NONE class MainActivity : AppCompatActivity(), @@ -276,10 +276,10 @@ class MainActivity : AppCompatActivity(), private fun navigateToCompose() { currentNavigationFragment?.apply { - exitTransition = createMaterialElevationScale(false).apply { + exitTransition = MaterialElevationScale(false).apply { duration = resources.getInteger(R.integer.reply_motion_duration_large).toLong() } - reenterTransition = createMaterialElevationScale(true).apply { + reenterTransition = MaterialElevationScale(true).apply { duration = resources.getInteger(R.integer.reply_motion_duration_large).toLong() } } diff --git a/Reply/app/src/main/java/com/materialstudies/reply/ui/home/HomeFragment.kt b/Reply/app/src/main/java/com/materialstudies/reply/ui/home/HomeFragment.kt index 393aabeb..31dff59b 100644 --- a/Reply/app/src/main/java/com/materialstudies/reply/ui/home/HomeFragment.kt +++ b/Reply/app/src/main/java/com/materialstudies/reply/ui/home/HomeFragment.kt @@ -28,6 +28,7 @@ import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.ItemTouchHelper +import com.google.android.material.transition.MaterialElevationScale import com.google.android.material.transition.MaterialFadeThrough import com.materialstudies.reply.R import com.materialstudies.reply.data.Email @@ -36,7 +37,6 @@ import com.materialstudies.reply.databinding.FragmentHomeBinding import com.materialstudies.reply.ui.MainActivity import com.materialstudies.reply.ui.MenuBottomSheetDialogFragment import com.materialstudies.reply.ui.nav.NavigationModel -import com.materialstudies.reply.util.createMaterialElevationScale /** * A [Fragment] that displays a list of emails. @@ -105,10 +105,10 @@ class HomeFragment : Fragment(), EmailAdapter.EmailAdapterListener { override fun onEmailClicked(cardView: View, email: Email) { // Set exit and reenter transitions here as opposed to in onCreate because these transitions // will be set and overwritten on HomeFragment for other navigation actions. - exitTransition = createMaterialElevationScale(false).apply { + exitTransition = MaterialElevationScale(false).apply { duration = resources.getInteger(R.integer.reply_motion_duration_large).toLong() } - reenterTransition = createMaterialElevationScale(true).apply { + reenterTransition = MaterialElevationScale(true).apply { duration = resources.getInteger(R.integer.reply_motion_duration_large).toLong() } val emailCardDetailTransitionName = getString(R.string.email_card_detail_transition_name) diff --git a/Reply/app/src/main/java/com/materialstudies/reply/util/TransitionUtils.kt b/Reply/app/src/main/java/com/materialstudies/reply/util/TransitionUtils.kt deleted file mode 100644 index 8886b63c..00000000 --- a/Reply/app/src/main/java/com/materialstudies/reply/util/TransitionUtils.kt +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2020 Google LLC - * - * 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 - * - * https://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.materialstudies.reply.util - -import androidx.transition.Transition -import com.google.android.material.transition.FadeProvider -import com.google.android.material.transition.MaterialSharedAxis -import com.google.android.material.transition.ScaleProvider - -private const val ELEVATION_SCALE = 0.85F - -/** - * Create an elevation scale transition that, e.g., can be used in conjunction with a container - * transform to give the effect that the outgoing screen is receding or advancing along the z-axis. - * - * TODO: remove once a MaterialElevationScale is available in the library. - */ -fun createMaterialElevationScale(forward: Boolean): Transition { - return MaterialSharedAxis(MaterialSharedAxis.Z, forward).apply { - val scaleProvider = primaryAnimatorProvider as ScaleProvider - scaleProvider.incomingStartScale = ELEVATION_SCALE - scaleProvider.outgoingEndScale = ELEVATION_SCALE - secondaryAnimatorProvider = FadeProvider() - } -} From f368f00a63185eb798d5cc0b5a512e5d58e3d4bd Mon Sep 17 00:00:00 2001 From: Dan Nizri Date: Wed, 5 Aug 2020 12:35:45 -0400 Subject: [PATCH 03/23] [Reply] Updated MDC library version to 1.2.0 stable (#53) --- Reply/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Reply/app/build.gradle b/Reply/app/build.gradle index 6a5fec94..101e2c88 100644 --- a/Reply/app/build.gradle +++ b/Reply/app/build.gradle @@ -65,7 +65,7 @@ dependencies { implementation "com.github.bumptech.glide:glide:4.9.0" // Material Components - implementation 'com.google.android.material:material:1.2.0-rc01' + implementation 'com.google.android.material:material:1.2.0' // Testing testImplementation 'junit:junit:4.12' From 2b8a7dc1786ea752732915089c3bbb14ee2db182 Mon Sep 17 00:00:00 2001 From: Dan Nizri Date: Wed, 12 Aug 2020 08:25:39 -0400 Subject: [PATCH 04/23] [Reply] Updated dependency versions (#54) --- Reply/app/build.gradle | 6 +++--- Reply/build.gradle | 6 ++---- Reply/gradle/wrapper/gradle-wrapper.properties | 4 ++-- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/Reply/app/build.gradle b/Reply/app/build.gradle index 101e2c88..edec88bf 100644 --- a/Reply/app/build.gradle +++ b/Reply/app/build.gradle @@ -53,11 +53,11 @@ dependencies { // AndroidX implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2' + implementation 'androidx.constraintlayout:constraintlayout:2.0.0-rc1' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'androidx.recyclerview:recyclerview:1.1.0-beta05' + implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'androidx.core:core-ktx:1.1.0' - implementation 'androidx.lifecycle:lifecycle-livedata-core-ktx:2.2.0-beta01' + implementation 'androidx.lifecycle:lifecycle-livedata-core-ktx:2.2.0' implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version" implementation "androidx.navigation:navigation-ui-ktx:$navigation_version" diff --git a/Reply/build.gradle b/Reply/build.gradle index 9a441109..7a9282e2 100644 --- a/Reply/build.gradle +++ b/Reply/build.gradle @@ -15,16 +15,14 @@ buildscript { ext { kotlin_version = '1.3.50' - navigation_version = '2.2.0-beta01' + navigation_version = '2.2.0' } repositories { google() jcenter() } dependencies{ - // Wait to move to 3.6 until ConstraintLayout related attribute bugs are resolved. See - // https://issuetracker.google.com/issues/138601946 for more details. - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:4.0.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version" diff --git a/Reply/gradle/wrapper/gradle-wrapper.properties b/Reply/gradle/wrapper/gradle-wrapper.properties index 1bd6748e..9334dd73 100644 --- a/Reply/gradle/wrapper/gradle-wrapper.properties +++ b/Reply/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Oct 21 09:40:35 PDT 2019 +#Tue Aug 11 20:17:06 EDT 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip From 439d97f9ae7440a3c4a8df4ebd00c4f4333d6807 Mon Sep 17 00:00:00 2001 From: hunterstich Date: Wed, 12 Aug 2020 08:57:44 -0400 Subject: [PATCH 05/23] [Reply] Restructure MenuBottomSheetDialogFragment with a default empty constructor. Configuration changes with MenuBottomSheetDialogFragment open would crash complaining about the lack of a default cosntructor to use for recreation. This upates the dialog to use a bundle and static constructor instead of a class constructor. --- .../materialstudies/reply/ui/MainActivity.kt | 15 ++------ .../reply/ui/MenuBottomSheetDialogFragment.kt | 37 ++++++++++++++----- .../reply/ui/home/HomeFragment.kt | 8 ++-- 3 files changed, 35 insertions(+), 25 deletions(-) diff --git a/Reply/app/src/main/java/com/materialstudies/reply/ui/MainActivity.kt b/Reply/app/src/main/java/com/materialstudies/reply/ui/MainActivity.kt index 4dceb3de..0cb2c080 100644 --- a/Reply/app/src/main/java/com/materialstudies/reply/ui/MainActivity.kt +++ b/Reply/app/src/main/java/com/materialstudies/reply/ui/MainActivity.kt @@ -40,14 +40,7 @@ import com.materialstudies.reply.ui.compose.ComposeFragmentDirections import com.materialstudies.reply.ui.email.EmailFragmentArgs import com.materialstudies.reply.ui.home.HomeFragmentDirections import com.materialstudies.reply.ui.home.Mailbox -import com.materialstudies.reply.ui.nav.AlphaSlideAction -import com.materialstudies.reply.ui.nav.BottomNavDrawerFragment -import com.materialstudies.reply.ui.nav.ChangeSettingsMenuStateAction -import com.materialstudies.reply.ui.nav.HalfClockwiseRotateSlideAction -import com.materialstudies.reply.ui.nav.HalfCounterClockwiseRotateSlideAction -import com.materialstudies.reply.ui.nav.NavigationAdapter -import com.materialstudies.reply.ui.nav.NavigationModelItem -import com.materialstudies.reply.ui.nav.ShowHideFabStateAction +import com.materialstudies.reply.ui.nav.* import com.materialstudies.reply.ui.search.SearchFragmentDirections import com.materialstudies.reply.util.contentView import kotlin.LazyThreadSafetyMode.NONE @@ -258,9 +251,9 @@ class MainActivity : AppCompatActivity(), } private fun showDarkThemeMenu() { - MenuBottomSheetDialogFragment(R.menu.dark_theme_bottom_sheet_menu) { - onDarkThemeMenuItemSelected(it.itemId) - }.show(supportFragmentManager, null) + MenuBottomSheetDialogFragment + .newInstance(R.menu.dark_theme_bottom_sheet_menu) + .show(supportFragmentManager, null) } fun navigateToHome(@StringRes titleRes: Int, mailbox: Mailbox) { diff --git a/Reply/app/src/main/java/com/materialstudies/reply/ui/MenuBottomSheetDialogFragment.kt b/Reply/app/src/main/java/com/materialstudies/reply/ui/MenuBottomSheetDialogFragment.kt index eb475161..1dba4227 100644 --- a/Reply/app/src/main/java/com/materialstudies/reply/ui/MenuBottomSheetDialogFragment.kt +++ b/Reply/app/src/main/java/com/materialstudies/reply/ui/MenuBottomSheetDialogFragment.kt @@ -18,19 +18,25 @@ package com.materialstudies.reply.ui import android.os.Bundle import android.view.LayoutInflater -import android.view.MenuItem import android.view.View import android.view.ViewGroup +import androidx.annotation.MenuRes import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.navigation.NavigationView import com.materialstudies.reply.R -class MenuBottomSheetDialogFragment( - private val menuRes: Int, - private val onNavigationItemSelected: (MenuItem) -> Boolean -) : BottomSheetDialogFragment() { +/** + * A bottom sheet dialog for displaying a simple list of action items. + */ +class MenuBottomSheetDialogFragment: BottomSheetDialogFragment() { private lateinit var navigationView: NavigationView + @MenuRes private var menuResId: Int = 0 + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + menuResId = arguments?.getInt(KEY_MENU_RES_ID, 0) ?: 0 + } override fun onCreateView( inflater: LayoutInflater, @@ -47,11 +53,24 @@ class MenuBottomSheetDialogFragment( override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) navigationView = view.findViewById(R.id.navigation_view) - navigationView.inflateMenu(menuRes) + navigationView.inflateMenu(menuResId) navigationView.setNavigationItemSelectedListener { - val consumed = onNavigationItemSelected(it) - if (consumed) dismiss() - consumed + dismiss() + true + } + } + + companion object { + + private const val KEY_MENU_RES_ID = "MenuBottomSheetDialogFragment_menuResId" + + fun newInstance(@MenuRes menuResId: Int): MenuBottomSheetDialogFragment { + val fragment = MenuBottomSheetDialogFragment() + val bundle = Bundle().apply { + putInt(KEY_MENU_RES_ID, menuResId) + } + fragment.arguments = bundle + return fragment } } } diff --git a/Reply/app/src/main/java/com/materialstudies/reply/ui/home/HomeFragment.kt b/Reply/app/src/main/java/com/materialstudies/reply/ui/home/HomeFragment.kt index 31dff59b..a564f9b7 100644 --- a/Reply/app/src/main/java/com/materialstudies/reply/ui/home/HomeFragment.kt +++ b/Reply/app/src/main/java/com/materialstudies/reply/ui/home/HomeFragment.kt @@ -118,11 +118,9 @@ class HomeFragment : Fragment(), EmailAdapter.EmailAdapterListener { } override fun onEmailLongPressed(email: Email): Boolean { - MenuBottomSheetDialogFragment(R.menu.email_bottom_sheet_menu) { - // Do nothing. - true - }.show(parentFragmentManager, null) - + MenuBottomSheetDialogFragment + .newInstance(R.menu.email_bottom_sheet_menu) + .show(parentFragmentManager, null) return true } From 99a5257d53e475d03630d98a4f26c92a3059b0e5 Mon Sep 17 00:00:00 2001 From: hunterstich Date: Wed, 12 Aug 2020 09:02:26 -0400 Subject: [PATCH 06/23] Re-add explicit imports --- .../java/com/materialstudies/reply/ui/MainActivity.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Reply/app/src/main/java/com/materialstudies/reply/ui/MainActivity.kt b/Reply/app/src/main/java/com/materialstudies/reply/ui/MainActivity.kt index 0cb2c080..e8b8df7b 100644 --- a/Reply/app/src/main/java/com/materialstudies/reply/ui/MainActivity.kt +++ b/Reply/app/src/main/java/com/materialstudies/reply/ui/MainActivity.kt @@ -40,7 +40,14 @@ import com.materialstudies.reply.ui.compose.ComposeFragmentDirections import com.materialstudies.reply.ui.email.EmailFragmentArgs import com.materialstudies.reply.ui.home.HomeFragmentDirections import com.materialstudies.reply.ui.home.Mailbox -import com.materialstudies.reply.ui.nav.* +import com.materialstudies.reply.ui.nav.AlphaSlideAction +import com.materialstudies.reply.ui.nav.BottomNavDrawerFragment +import com.materialstudies.reply.ui.nav.ChangeSettingsMenuStateAction +import com.materialstudies.reply.ui.nav.HalfClockwiseRotateSlideAction +import com.materialstudies.reply.ui.nav.HalfCounterClockwiseRotateSlideAction +import com.materialstudies.reply.ui.nav.NavigationAdapter +import com.materialstudies.reply.ui.nav.NavigationModelItem +import com.materialstudies.reply.ui.nav.ShowHideFabStateAction import com.materialstudies.reply.ui.search.SearchFragmentDirections import com.materialstudies.reply.util.contentView import kotlin.LazyThreadSafetyMode.NONE From 94bc19cd1d08b7aa441b52ac2165b32db6bd74b9 Mon Sep 17 00:00:00 2001 From: Hunter Date: Wed, 12 Aug 2020 11:51:30 -0400 Subject: [PATCH 07/23] Update MenuBottomSheetDialogFragment.kt Class formatting fix --- .../materialstudies/reply/ui/MenuBottomSheetDialogFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Reply/app/src/main/java/com/materialstudies/reply/ui/MenuBottomSheetDialogFragment.kt b/Reply/app/src/main/java/com/materialstudies/reply/ui/MenuBottomSheetDialogFragment.kt index 1dba4227..b3b63ec2 100644 --- a/Reply/app/src/main/java/com/materialstudies/reply/ui/MenuBottomSheetDialogFragment.kt +++ b/Reply/app/src/main/java/com/materialstudies/reply/ui/MenuBottomSheetDialogFragment.kt @@ -28,7 +28,7 @@ import com.materialstudies.reply.R /** * A bottom sheet dialog for displaying a simple list of action items. */ -class MenuBottomSheetDialogFragment: BottomSheetDialogFragment() { +class MenuBottomSheetDialogFragment : BottomSheetDialogFragment() { private lateinit var navigationView: NavigationView @MenuRes private var menuResId: Int = 0 From 25125b11c821882816f7abcae4be0c4a8f72a310 Mon Sep 17 00:00:00 2001 From: Nick Rout Date: Fri, 23 Oct 2020 11:27:12 +0200 Subject: [PATCH 08/23] Update dependencies --- MaterialThemeBuilder/app/build.gradle | 14 +++++++------- MaterialThemeBuilder/build.gradle | 9 ++------- .../gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/MaterialThemeBuilder/app/build.gradle b/MaterialThemeBuilder/app/build.gradle index 4387a014..5c77e0d3 100644 --- a/MaterialThemeBuilder/app/build.gradle +++ b/MaterialThemeBuilder/app/build.gradle @@ -2,11 +2,11 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' android { - compileSdkVersion 29 + compileSdkVersion 30 defaultConfig { applicationId "io.material.materialthemebuilder" minSdkVersion 23 - targetSdkVersion 29 + targetSdkVersion 30 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -33,12 +33,12 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" // AndroidX - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.2' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha01' - implementation 'androidx.core:core-ktx:1.1.0' + implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha06' + implementation 'androidx.core:core-ktx:1.3.2' //MDC - implementation 'com.google.android.material:material:1.2.0-alpha03' + implementation 'com.google.android.material:material:1.2.1' } diff --git a/MaterialThemeBuilder/build.gradle b/MaterialThemeBuilder/build.gradle index 2a92ec48..24d471bc 100644 --- a/MaterialThemeBuilder/build.gradle +++ b/MaterialThemeBuilder/build.gradle @@ -14,20 +14,15 @@ buildscript { ext { - kotlin_version = '1.3.61' + kotlin_version = '1.4.10' } repositories { google() jcenter() } dependencies{ - // Wait to move to 3.6 until ConstraintLayout related attribute bugs are resolved. See - // https://issuetracker.google.com/issues/138601946 for more details. - classpath 'com.android.tools.build:gradle:3.5.3' + classpath 'com.android.tools.build:gradle:4.1.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files } } diff --git a/MaterialThemeBuilder/gradle/wrapper/gradle-wrapper.properties b/MaterialThemeBuilder/gradle/wrapper/gradle-wrapper.properties index a21d5fef..082e0a01 100644 --- a/MaterialThemeBuilder/gradle/wrapper/gradle-wrapper.properties +++ b/MaterialThemeBuilder/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip From 6d709cf7588ebba0972b5ec529537fdfe35c21ee Mon Sep 17 00:00:00 2001 From: Nick Rout Date: Fri, 23 Oct 2020 11:34:51 +0200 Subject: [PATCH 09/23] Fix warnings and lint issues --- MaterialThemeBuilder/app/build.gradle | 4 +- .../data/PreferenceRepository.kt | 2 +- .../materialthemebuilder/ui/MainActivity.kt | 3 +- .../ui/MainViewPagerAdapter.kt | 2 +- .../ui/component/ComponentViewHolder.kt | 37 ++++++++++--------- .../ui/instruction/InstructionsFragment.kt | 3 +- .../ui/themesummary/SubsystemViewHolder.kt | 6 +-- .../widget/LabelLinkView.kt | 2 +- .../widget/TypeAttributeView.kt | 9 +++-- 9 files changed, 35 insertions(+), 33 deletions(-) diff --git a/MaterialThemeBuilder/app/build.gradle b/MaterialThemeBuilder/app/build.gradle index 5c77e0d3..82af2778 100644 --- a/MaterialThemeBuilder/app/build.gradle +++ b/MaterialThemeBuilder/app/build.gradle @@ -18,8 +18,8 @@ android { } } compileOptions { - sourceCompatibility = 1.8 - targetCompatibility = 1.8 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/data/PreferenceRepository.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/data/PreferenceRepository.kt index f12c0eaa..cb5fe17d 100644 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/data/PreferenceRepository.kt +++ b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/data/PreferenceRepository.kt @@ -26,7 +26,7 @@ import androidx.lifecycle.MutableLiveData */ class PreferenceRepository(private val sharedPreferences: SharedPreferences) { - val nightMode: Int + private val nightMode: Int get() = sharedPreferences.getInt(PREFERENCE_NIGHT_MODE, PREFERENCE_NIGHT_MODE_DEF_VAL) private val _nightModeLive: MutableLiveData = MutableLiveData() diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainActivity.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainActivity.kt index 7482621f..bb841854 100644 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainActivity.kt +++ b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainActivity.kt @@ -18,7 +18,6 @@ package io.material.materialthemebuilder.ui import androidx.appcompat.app.AppCompatActivity import android.os.Bundle -import androidx.lifecycle.Observer import com.google.android.material.tabs.TabLayout import androidx.viewpager.widget.ViewPager import io.material.materialthemebuilder.R @@ -47,7 +46,7 @@ class MainActivity : AppCompatActivity() { viewPager.adapter = adapter (application as App).preferenceRepository - .nightModeLive.observe(this, Observer { nightMode -> + .nightModeLive.observe(this, { nightMode -> nightMode?.let { delegate.localNightMode = it } } ) diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainViewPagerAdapter.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainViewPagerAdapter.kt index 20f6a2b9..985f36d6 100644 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainViewPagerAdapter.kt +++ b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainViewPagerAdapter.kt @@ -31,7 +31,7 @@ import io.material.materialthemebuilder.ui.themesummary.ThemeSummaryFragment class MainViewPagerAdapter( private val context: Context, fragmentManager: FragmentManager -) : FragmentStatePagerAdapter(fragmentManager) { +) : FragmentStatePagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { enum class MainFragments(val titleRes: Int) { INSTRUCTIONS(R.string.tab_title_instructions), diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentViewHolder.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentViewHolder.kt index f340f966..d0550c9e 100644 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentViewHolder.kt +++ b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentViewHolder.kt @@ -16,12 +16,14 @@ package io.material.materialthemebuilder.ui.component +import android.annotation.SuppressLint import android.view.Gravity import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.FrameLayout import androidx.core.content.ContextCompat +import androidx.core.view.GravityCompat import androidx.drawerlayout.widget.DrawerLayout import androidx.recyclerview.widget.RecyclerView import com.google.android.material.bottomappbar.BottomAppBar @@ -83,7 +85,7 @@ sealed class ComponentViewHolder(val view: View) : RecyclerView.ViewHolder(view) private val navigationView: NavigationView = view.findViewById(R.id.nav_view) override fun bind(component: Component) { - drawerLayout.openDrawer(Gravity.LEFT) + drawerLayout.openDrawer(GravityCompat.START) navigationView.setNavigationItemSelectedListener { true } navigationView.setCheckedItem(R.id.nav_item_one) } @@ -126,6 +128,7 @@ sealed class ComponentViewHolder(val view: View) : RecyclerView.ViewHolder(view) parent: ViewGroup ) : ComponentViewHolder(inflate(parent, R.layout.component_tabs)) + @SuppressLint("ShowToast") class SnackbarComponentViewHolder( parent: ViewGroup ) : ComponentViewHolder(inflate(parent, R.layout.component_snackbar)) { @@ -183,22 +186,22 @@ sealed class ComponentViewHolder(val view: View) : RecyclerView.ViewHolder(view) listener: ComponentAdapter.ComponentAdapterListener ): ComponentViewHolder { return when (Component.values()[viewType]) { - BUTTON -> ComponentViewHolder.ButtonComponentViewHolder(parent) - FAB -> ComponentViewHolder.FabComponentViewHolder(parent) - CARD -> ComponentViewHolder.CardComponentViewHolder(parent) - TOP_APP_BAR -> ComponentViewHolder.TopAppBarComponentViewHolder(parent) - CHIP -> ComponentViewHolder.ChipComponentViewHolder(parent) - DRAWER -> ComponentViewHolder.DrawerComponentViewHolder(parent) - TEXT_FIELD -> ComponentViewHolder.TextFieldComponentViewHolder(parent) - BOTTOM_NAVIGATION -> ComponentViewHolder.BottomNavigationComponentViewHolder(parent) - SWITCH -> ComponentViewHolder.SwitchComponentViewHolder(parent) - RADIO_BUTTON -> ComponentViewHolder.RadioButtonComponentViewHolder(parent) - CHECKBOX -> ComponentViewHolder.CheckboxComponentViewHolder(parent) - BOTTOM_APP_BAR -> ComponentViewHolder.BottomAppBarComponentViewHolder(parent) - TABS -> ComponentViewHolder.TabsComponentViewHolder(parent) - SNACKBAR -> ComponentViewHolder.SnackbarComponentViewHolder(parent) - DIALOG -> ComponentViewHolder.DialogComponentViewHolder(parent) - BOTTOM_SHEET -> ComponentViewHolder.BottomSheetComponentViewHolder(parent, listener) + BUTTON -> ButtonComponentViewHolder(parent) + FAB -> FabComponentViewHolder(parent) + CARD -> CardComponentViewHolder(parent) + TOP_APP_BAR -> TopAppBarComponentViewHolder(parent) + CHIP -> ChipComponentViewHolder(parent) + DRAWER -> DrawerComponentViewHolder(parent) + TEXT_FIELD -> TextFieldComponentViewHolder(parent) + BOTTOM_NAVIGATION -> BottomNavigationComponentViewHolder(parent) + SWITCH -> SwitchComponentViewHolder(parent) + RADIO_BUTTON -> RadioButtonComponentViewHolder(parent) + CHECKBOX -> CheckboxComponentViewHolder(parent) + BOTTOM_APP_BAR -> BottomAppBarComponentViewHolder(parent) + TABS -> TabsComponentViewHolder(parent) + SNACKBAR -> SnackbarComponentViewHolder(parent) + DIALOG -> DialogComponentViewHolder(parent) + BOTTOM_SHEET -> BottomSheetComponentViewHolder(parent, listener) } } diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/instruction/InstructionsFragment.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/instruction/InstructionsFragment.kt index ec204ae6..a09bc563 100644 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/instruction/InstructionsFragment.kt +++ b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/instruction/InstructionsFragment.kt @@ -21,7 +21,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.lifecycle.Observer import com.google.android.material.switchmaterial.SwitchMaterial import io.material.materialthemebuilder.App import io.material.materialthemebuilder.R @@ -44,7 +43,7 @@ class InstructionsFragment : Fragment() { val darkThemeSwitch: SwitchMaterial = view.findViewById(R.id.dark_theme_switch) val preferenceRepository = (requireActivity().application as App).preferenceRepository - preferenceRepository.isDarkThemeLive.observe(this, Observer { isDarkTheme -> + preferenceRepository.isDarkThemeLive.observe(this, { isDarkTheme -> isDarkTheme?.let { darkThemeSwitch.isChecked = it } }) diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/SubsystemViewHolder.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/SubsystemViewHolder.kt index 919cad14..9cddee20 100644 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/SubsystemViewHolder.kt +++ b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/SubsystemViewHolder.kt @@ -49,9 +49,9 @@ sealed class SubsystemViewHolder(val view: View) : RecyclerView.ViewHolder(view) companion object { fun create(parent: ViewGroup, viewType: Int): SubsystemViewHolder { return when (Subsystem.values()[viewType]) { - COLOR -> SubsystemViewHolder.ColorSubsystemViewHolder(parent) - TYPE -> SubsystemViewHolder.TypeSubsystemViewHolder(parent) - SHAPE -> SubsystemViewHolder.ShapeSubsystemViewHolder(parent) + COLOR -> ColorSubsystemViewHolder(parent) + TYPE -> TypeSubsystemViewHolder(parent) + SHAPE -> ShapeSubsystemViewHolder(parent) } } diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/LabelLinkView.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/LabelLinkView.kt index ddf8a81a..63c26f5a 100644 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/LabelLinkView.kt +++ b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/LabelLinkView.kt @@ -71,7 +71,7 @@ class LabelLinkView @JvmOverloads constructor( init { clipToPadding = false - orientation = LinearLayout.HORIZONTAL + orientation = HORIZONTAL val view = View.inflate(context, R.layout.label_view_layout, this) leadingImageView = view.findViewById(R.id.label_leading_image_view) diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/TypeAttributeView.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/TypeAttributeView.kt index 9030f2f2..d38624d1 100644 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/TypeAttributeView.kt +++ b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/TypeAttributeView.kt @@ -17,6 +17,7 @@ package io.material.materialthemebuilder.widget import android.content.Context +import android.content.res.ColorStateList import android.util.AttributeSet import android.view.View import androidx.appcompat.widget.AppCompatTextView @@ -37,7 +38,7 @@ class TypeAttributeView @JvmOverloads constructor( private val typeAttributeTextView: AppCompatTextView private val typeAttributePreviewTextView: AppCompatTextView - var typeAttrText: String = "?textAppearanceHeadline1" + private var typeAttrText: String = "?textAppearanceHeadline1" set(value) { typeAttributeTextView.text = value field = value @@ -49,13 +50,13 @@ class TypeAttributeView @JvmOverloads constructor( field = value } - var typeAttrPreviewTextAppearance: Int = R.attr.textAppearanceHeadline1 + private var typeAttrPreviewTextAppearance: Int = R.attr.textAppearanceHeadline1 set(value) { typeAttributePreviewTextView.setTextAppearance(value) field = value } - var typeAttrPreviewTextColor = AppCompatResources.getColorStateList( + private var typeAttrPreviewTextColor: ColorStateList = AppCompatResources.getColorStateList( context, R.color.material_on_background_emphasis_high_type ) @@ -65,7 +66,7 @@ class TypeAttributeView @JvmOverloads constructor( } init { - orientation = LinearLayout.HORIZONTAL + orientation = HORIZONTAL val view = View.inflate(context, R.layout.type_attribute_view_layout, this) typeAttributeTextView = view.findViewById(R.id.type_attribute) typeAttributePreviewTextView = view.findViewById(R.id.type_attribute_preview) From 78b8b1b99737f484aca3601b1ec6dcd3a6d75bad Mon Sep 17 00:00:00 2001 From: Nick Rout Date: Fri, 23 Oct 2020 11:36:06 +0200 Subject: [PATCH 10/23] Remove redundant legacy support dependency --- MaterialThemeBuilder/app/build.gradle | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/MaterialThemeBuilder/app/build.gradle b/MaterialThemeBuilder/app/build.gradle index 82af2778..dd2430bc 100644 --- a/MaterialThemeBuilder/app/build.gradle +++ b/MaterialThemeBuilder/app/build.gradle @@ -30,12 +30,11 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) // Kotlin - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" // AndroidX implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.2' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha06' implementation 'androidx.core:core-ktx:1.3.2' From 8ba8fac56b85841c98c2d6a87d154c6f7e143cde Mon Sep 17 00:00:00 2001 From: Nick Rout Date: Fri, 23 Oct 2020 11:37:09 +0200 Subject: [PATCH 11/23] Make theme name an EditText --- MaterialThemeBuilder/app/src/main/res/layout/activity_main.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MaterialThemeBuilder/app/src/main/res/layout/activity_main.xml b/MaterialThemeBuilder/app/src/main/res/layout/activity_main.xml index 064976fa..ae9d0171 100644 --- a/MaterialThemeBuilder/app/src/main/res/layout/activity_main.xml +++ b/MaterialThemeBuilder/app/src/main/res/layout/activity_main.xml @@ -73,7 +73,7 @@ - Date: Fri, 23 Oct 2020 11:55:35 +0200 Subject: [PATCH 12/23] Fix warnings in resources --- .../app/src/main/res/layout/activity_main.xml | 7 ++-- .../res/layout/component_bottom_app_bar.xml | 4 +- .../src/main/res/layout/component_cards.xml | 10 +++-- .../src/main/res/layout/component_drawer.xml | 2 +- .../src/main/res/layout/component_fabs.xml | 7 +++- .../main/res/layout/fragment_bottom_sheet.xml | 5 ++- .../src/main/res/layout/label_view_layout.xml | 9 +++-- .../src/main/res/layout/subsystem_color.xml | 39 +++++++++++------- .../src/main/res/layout/subsystem_shape.xml | 10 +++-- .../src/main/res/layout/subsystem_type.xml | 40 +++++++++++++------ 10 files changed, 86 insertions(+), 47 deletions(-) diff --git a/MaterialThemeBuilder/app/src/main/res/layout/activity_main.xml b/MaterialThemeBuilder/app/src/main/res/layout/activity_main.xml index ae9d0171..87cf9a2e 100644 --- a/MaterialThemeBuilder/app/src/main/res/layout/activity_main.xml +++ b/MaterialThemeBuilder/app/src/main/res/layout/activity_main.xml @@ -18,7 +18,6 @@ @@ -62,8 +61,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:layout_marginLeft="@dimen/keyline_2" - android:layout_marginRight="@dimen/keyline_4" + android:layout_marginStart="@dimen/keyline_2" + android:layout_marginEnd="@dimen/keyline_4" android:gravity="center_vertical" android:text="@string/app_name" android:textAppearance="?textAppearanceHeadline6" @@ -87,7 +86,7 @@ android:scrollHorizontally="true" android:inputType="textCapWords" android:imeOptions="actionDone" - tools:ignore="TextViewEdits"/> + android:importantForAutofill="no"/> diff --git a/MaterialThemeBuilder/app/src/main/res/layout/component_bottom_app_bar.xml b/MaterialThemeBuilder/app/src/main/res/layout/component_bottom_app_bar.xml index 034ad197..7a319c10 100644 --- a/MaterialThemeBuilder/app/src/main/res/layout/component_bottom_app_bar.xml +++ b/MaterialThemeBuilder/app/src/main/res/layout/component_bottom_app_bar.xml @@ -17,6 +17,7 @@ + app:layout_anchor="@+id/bottom_app_bar" + tools:ignore="ContentDescription"/> diff --git a/MaterialThemeBuilder/app/src/main/res/layout/component_cards.xml b/MaterialThemeBuilder/app/src/main/res/layout/component_cards.xml index 7bace357..ceb7551f 100644 --- a/MaterialThemeBuilder/app/src/main/res/layout/component_cards.xml +++ b/MaterialThemeBuilder/app/src/main/res/layout/component_cards.xml @@ -18,6 +18,7 @@ + app:layout_constraintEnd_toEndOf="parent" + tools:ignore="ContentDescription" /> @@ -89,7 +91,7 @@ android:layout_height="wrap_content" android:layout_marginStart="@dimen/keyline_4" android:layout_marginEnd="@dimen/keyline_5" - android:firstBaselineToTopHeight="@dimen/keyline_5" + app:firstBaselineToTopHeight="@dimen/keyline_5" android:text="@string/lorem_ipsum" android:textAppearance="?attr/textAppearanceBody2" android:textColor="@color/material_on_surface_emphasis_medium" diff --git a/MaterialThemeBuilder/app/src/main/res/layout/component_drawer.xml b/MaterialThemeBuilder/app/src/main/res/layout/component_drawer.xml index 8e115e4f..6b1f1547 100644 --- a/MaterialThemeBuilder/app/src/main/res/layout/component_drawer.xml +++ b/MaterialThemeBuilder/app/src/main/res/layout/component_drawer.xml @@ -51,7 +51,7 @@ android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" - android:layout_gravity="start|left" + android:layout_gravity="start" android:backgroundTint="?colorSurface" app:headerLayout="@layout/drawer_header_layout" app:menu="@menu/navigation_view_menu" /> diff --git a/MaterialThemeBuilder/app/src/main/res/layout/component_fabs.xml b/MaterialThemeBuilder/app/src/main/res/layout/component_fabs.xml index 136635ed..a3b9e2a7 100644 --- a/MaterialThemeBuilder/app/src/main/res/layout/component_fabs.xml +++ b/MaterialThemeBuilder/app/src/main/res/layout/component_fabs.xml @@ -17,6 +17,7 @@ + app:layout_constraintTop_toTopOf="@+id/extended_fab" + tools:ignore="ContentDescription" /> + app:layout_constraintTop_toTopOf="@+id/fab" + tools:ignore="ContentDescription" /> diff --git a/MaterialThemeBuilder/app/src/main/res/layout/fragment_bottom_sheet.xml b/MaterialThemeBuilder/app/src/main/res/layout/fragment_bottom_sheet.xml index c785096d..a90a152e 100644 --- a/MaterialThemeBuilder/app/src/main/res/layout/fragment_bottom_sheet.xml +++ b/MaterialThemeBuilder/app/src/main/res/layout/fragment_bottom_sheet.xml @@ -16,6 +16,7 @@ --> diff --git a/MaterialThemeBuilder/app/src/main/res/layout/label_view_layout.xml b/MaterialThemeBuilder/app/src/main/res/layout/label_view_layout.xml index 6c1a4b42..265294ee 100644 --- a/MaterialThemeBuilder/app/src/main/res/layout/label_view_layout.xml +++ b/MaterialThemeBuilder/app/src/main/res/layout/label_view_layout.xml @@ -16,7 +16,8 @@ --> + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> + android:visibility="gone" + tools:ignore="ContentDescription" /> + app:srcCompat="@drawable/ic_open_in_new_24dp" + tools:ignore="ContentDescription" /> diff --git a/MaterialThemeBuilder/app/src/main/res/layout/subsystem_color.xml b/MaterialThemeBuilder/app/src/main/res/layout/subsystem_color.xml index d11bf2f3..d6fe3e44 100644 --- a/MaterialThemeBuilder/app/src/main/res/layout/subsystem_color.xml +++ b/MaterialThemeBuilder/app/src/main/res/layout/subsystem_color.xml @@ -17,6 +17,7 @@ + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> - + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> - + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> diff --git a/MaterialThemeBuilder/app/src/main/res/layout/subsystem_shape.xml b/MaterialThemeBuilder/app/src/main/res/layout/subsystem_shape.xml index 51ae04f9..0a00f27f 100644 --- a/MaterialThemeBuilder/app/src/main/res/layout/subsystem_shape.xml +++ b/MaterialThemeBuilder/app/src/main/res/layout/subsystem_shape.xml @@ -17,6 +17,7 @@ + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> diff --git a/MaterialThemeBuilder/app/src/main/res/layout/subsystem_type.xml b/MaterialThemeBuilder/app/src/main/res/layout/subsystem_type.xml index 17a71364..2788c75d 100644 --- a/MaterialThemeBuilder/app/src/main/res/layout/subsystem_type.xml +++ b/MaterialThemeBuilder/app/src/main/res/layout/subsystem_type.xml @@ -17,6 +17,7 @@ + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> + android:layout_marginBottom="@dimen/keyline_2" + tools:ignore="HardcodedText" /> From 98df5f3657ab559fbd8ec424d2ee4d9130e67e56 Mon Sep 17 00:00:00 2001 From: Nick Rout Date: Fri, 23 Oct 2020 13:34:11 +0200 Subject: [PATCH 13/23] Use regular Kotlin stdlib dependency --- MaterialThemeBuilder/app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MaterialThemeBuilder/app/build.gradle b/MaterialThemeBuilder/app/build.gradle index dd2430bc..f5298326 100644 --- a/MaterialThemeBuilder/app/build.gradle +++ b/MaterialThemeBuilder/app/build.gradle @@ -30,7 +30,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) // Kotlin - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" // AndroidX implementation 'androidx.appcompat:appcompat:1.2.0' From 72ad52d9d84775c7d9936dc76e60f921b26631f4 Mon Sep 17 00:00:00 2001 From: Nick Rout Date: Fri, 23 Oct 2020 13:35:04 +0200 Subject: [PATCH 14/23] Move observer lambdas outside of parens --- .../java/io/material/materialthemebuilder/ui/MainActivity.kt | 3 +-- .../ui/instruction/InstructionsFragment.kt | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainActivity.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainActivity.kt index bb841854..0831f11a 100644 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainActivity.kt +++ b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainActivity.kt @@ -46,9 +46,8 @@ class MainActivity : AppCompatActivity() { viewPager.adapter = adapter (application as App).preferenceRepository - .nightModeLive.observe(this, { nightMode -> + .nightModeLive.observe(this) { nightMode -> nightMode?.let { delegate.localNightMode = it } } - ) } } diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/instruction/InstructionsFragment.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/instruction/InstructionsFragment.kt index a09bc563..2f6b6631 100644 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/instruction/InstructionsFragment.kt +++ b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/instruction/InstructionsFragment.kt @@ -43,9 +43,9 @@ class InstructionsFragment : Fragment() { val darkThemeSwitch: SwitchMaterial = view.findViewById(R.id.dark_theme_switch) val preferenceRepository = (requireActivity().application as App).preferenceRepository - preferenceRepository.isDarkThemeLive.observe(this, { isDarkTheme -> + preferenceRepository.isDarkThemeLive.observe(this) { isDarkTheme -> isDarkTheme?.let { darkThemeSwitch.isChecked = it } - }) + } darkThemeSwitch.setOnCheckedChangeListener { _, checked -> preferenceRepository.isDarkTheme = checked From f9c8b1c4073019b9499226e748d3c70a5f8d1748 Mon Sep 17 00:00:00 2001 From: Chris Banes Date: Mon, 2 Nov 2020 09:00:23 +0000 Subject: [PATCH 15/23] Update Owl - MDC to 1.2.1 - AGP to 4.1.0 - Gradle to 6.5 - Kotlin to 1.4.10 - Fragment, AppCompat, ConstraintLayout & Navigation to latest - AndroidX Core to 1.5.0-alpha04 - Glide to 4.11.0 Also - Compile and target SDK are now 30 - Turned off Jetifier (no need for it) - Migrated to new WindowInsets APIs --- Owl/app/build.gradle | 24 +++++++++------- .../owl/ui/lessons/LessonsSheetFragment.kt | 5 +++- .../owl/util/BindingAdapters.kt | 28 +++++++++++-------- Owl/build.gradle | 6 ++-- Owl/gradle.properties | 2 -- Owl/gradle/wrapper/gradle-wrapper.properties | 3 +- 6 files changed, 40 insertions(+), 28 deletions(-) diff --git a/Owl/app/build.gradle b/Owl/app/build.gradle index fb1c4496..ce4064c3 100644 --- a/Owl/app/build.gradle +++ b/Owl/app/build.gradle @@ -18,46 +18,50 @@ apply plugin: 'kotlin-kapt' apply plugin: 'androidx.navigation.safeargs.kotlin' android { - compileSdkVersion 29 + compileSdkVersion 30 defaultConfig { applicationId 'com.materialstudies.owl' minSdkVersion 23 - targetSdkVersion 29 + targetSdkVersion 30 versionCode 1 versionName '1.0' vectorDrawables.useSupportLibrary = true } + dataBinding { enabled true } + buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + kotlinOptions { jvmTarget = "1.8" } } dependencies { - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.fragment:fragment:1.2.0-beta02' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - implementation 'androidx.core:core-ktx:1.1.0' - implementation 'com.google.android.material:material:1.1.0-beta01' - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.fragment:fragment-ktx:1.2.5' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation 'androidx.core:core-ktx:1.5.0-alpha04' + implementation 'com.google.android.material:material:1.2.1' + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation "androidx.navigation:navigation-runtime-ktx:$nav_version" implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version" implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' - implementation 'com.github.bumptech.glide:glide:4.9.0' - annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0' + implementation 'com.github.bumptech.glide:glide:4.11.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' } diff --git a/Owl/app/src/main/java/com/materialstudies/owl/ui/lessons/LessonsSheetFragment.kt b/Owl/app/src/main/java/com/materialstudies/owl/ui/lessons/LessonsSheetFragment.kt index 4ee5f6e5..0eb863a9 100644 --- a/Owl/app/src/main/java/com/materialstudies/owl/ui/lessons/LessonsSheetFragment.kt +++ b/Owl/app/src/main/java/com/materialstudies/owl/ui/lessons/LessonsSheetFragment.kt @@ -24,9 +24,12 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.WindowInsets import androidx.activity.addCallback import androidx.annotation.ColorInt import androidx.annotation.Px +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.WindowInsetsCompat.Type import androidx.core.view.doOnLayout import androidx.core.view.forEach import androidx.core.view.postDelayed @@ -148,7 +151,7 @@ class LessonsSheetFragment : Fragment() { } }) lessonsSheet.doOnApplyWindowInsets { _, insets, _, _ -> - behavior.peekHeight = peek + insets.systemWindowInsetBottom + behavior.peekHeight = peek + insets.getInsets(Type.navigationBars()).bottom } } collapsePlaylist.setOnClickListener { diff --git a/Owl/app/src/main/java/com/materialstudies/owl/util/BindingAdapters.kt b/Owl/app/src/main/java/com/materialstudies/owl/util/BindingAdapters.kt index 1af559bc..270e4fcf 100644 --- a/Owl/app/src/main/java/com/materialstudies/owl/util/BindingAdapters.kt +++ b/Owl/app/src/main/java/com/materialstudies/owl/util/BindingAdapters.kt @@ -19,8 +19,9 @@ package com.materialstudies.owl.util import android.graphics.drawable.Drawable import android.view.View import android.view.ViewGroup -import android.view.WindowInsets import android.widget.ImageView +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.core.view.updateLayoutParams import androidx.databinding.BindingAdapter import com.bumptech.glide.Glide @@ -55,6 +56,9 @@ fun View.bindElevationOverlay(previousElevation: Float, elevation: Float) { @BindingAdapter("layoutFullscreen") fun View.bindLayoutFullscreen(previousFullscreen: Boolean, fullscreen: Boolean) { if (previousFullscreen != fullscreen && fullscreen) { + @Suppress("DEPRECATION") + // The new alternative is WindowCompat.setDecorFitsSystemWindows, but we can't + // always get access to the window from a view. systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION @@ -87,10 +91,11 @@ fun View.applySystemWindowInsetsPadding( } doOnApplyWindowInsets { view, insets, padding, _ -> - val left = if (applyLeft) insets.systemWindowInsetLeft else 0 - val top = if (applyTop) insets.systemWindowInsetTop else 0 - val right = if (applyRight) insets.systemWindowInsetRight else 0 - val bottom = if (applyBottom) insets.systemWindowInsetBottom else 0 + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + val left = if (applyLeft) systemBars.left else 0 + val top = if (applyTop) systemBars.top else 0 + val right = if (applyRight) systemBars.right else 0 + val bottom = if (applyBottom) systemBars.bottom else 0 view.setPadding( padding.left + left, @@ -127,10 +132,11 @@ fun View.applySystemWindowInsetsMargin( } doOnApplyWindowInsets { view, insets, _, margin -> - val left = if (applyLeft) insets.systemWindowInsetLeft else 0 - val top = if (applyTop) insets.systemWindowInsetTop else 0 - val right = if (applyRight) insets.systemWindowInsetRight else 0 - val bottom = if (applyBottom) insets.systemWindowInsetBottom else 0 + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + val left = if (applyLeft) systemBars.left else 0 + val top = if (applyTop) systemBars.top else 0 + val right = if (applyRight) systemBars.right else 0 + val bottom = if (applyBottom) systemBars.bottom else 0 view.updateLayoutParams { leftMargin = margin.left + left @@ -142,14 +148,14 @@ fun View.applySystemWindowInsetsMargin( } fun View.doOnApplyWindowInsets( - block: (View, WindowInsets, InitialPadding, InitialMargin) -> Unit + block: (View, WindowInsetsCompat, InitialPadding, InitialMargin) -> Unit ) { // Create a snapshot of the view's padding & margin states val initialPadding = recordInitialPaddingForView(this) val initialMargin = recordInitialMarginForView(this) // Set an actual OnApplyWindowInsetsListener which proxies to the given // lambda, also passing in the original padding & margin states - setOnApplyWindowInsetsListener { v, insets -> + ViewCompat.setOnApplyWindowInsetsListener(this) { v, insets -> block(v, insets, initialPadding, initialMargin) // Always return the insets, so that children can also use them insets diff --git a/Owl/build.gradle b/Owl/build.gradle index 6d482e77..ca25b341 100644 --- a/Owl/build.gradle +++ b/Owl/build.gradle @@ -13,14 +13,14 @@ */ buildscript { - ext.kotlin_version = '1.3.50' - ext.nav_version = '2.2.0-beta01' + ext.kotlin_version = '1.4.10' + ext.nav_version = '2.3.1' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:4.1.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } diff --git a/Owl/gradle.properties b/Owl/gradle.properties index 23339e0d..83df5e3a 100644 --- a/Owl/gradle.properties +++ b/Owl/gradle.properties @@ -15,7 +15,5 @@ org.gradle.jvmargs=-Xmx1536m # Android operating system, and which are packaged with your app's APK # https://developer.android.com/topic/libraries/support-library/androidx-rn android.useAndroidX=true -# Automatically convert third-party libraries to use AndroidX -android.enableJetifier=true # Kotlin code style for this project: "official" or "obsolete": kotlin.code.style=official diff --git a/Owl/gradle/wrapper/gradle-wrapper.properties b/Owl/gradle/wrapper/gradle-wrapper.properties index f04d6a20..c5f2522d 100644 --- a/Owl/gradle/wrapper/gradle-wrapper.properties +++ b/Owl/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Mon Nov 02 08:45:57 GMT 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip From c05955c6833f6e87bfe2406c72b7d39eb76ac80a Mon Sep 17 00:00:00 2001 From: Chris Banes Date: Mon, 2 Nov 2020 09:02:31 +0000 Subject: [PATCH 16/23] Remove unused imports --- .../com/materialstudies/owl/ui/lessons/LessonsSheetFragment.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/Owl/app/src/main/java/com/materialstudies/owl/ui/lessons/LessonsSheetFragment.kt b/Owl/app/src/main/java/com/materialstudies/owl/ui/lessons/LessonsSheetFragment.kt index 0eb863a9..28945f12 100644 --- a/Owl/app/src/main/java/com/materialstudies/owl/ui/lessons/LessonsSheetFragment.kt +++ b/Owl/app/src/main/java/com/materialstudies/owl/ui/lessons/LessonsSheetFragment.kt @@ -24,11 +24,9 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.WindowInsets import androidx.activity.addCallback import androidx.annotation.ColorInt import androidx.annotation.Px -import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat.Type import androidx.core.view.doOnLayout import androidx.core.view.forEach From e54afef36da6174fa0ffa1cdda9632d7b3c32600 Mon Sep 17 00:00:00 2001 From: Chris Banes Date: Mon, 2 Nov 2020 15:35:50 +0000 Subject: [PATCH 17/23] [Reply] Dependency updates Update various dependencies, and turn off Jetifier --- Reply/app/build.gradle | 21 ++++++++----------- Reply/build.gradle | 10 +++------ Reply/gradle.properties | 1 - .../gradle/wrapper/gradle-wrapper.properties | 4 ++-- 4 files changed, 14 insertions(+), 22 deletions(-) diff --git a/Reply/app/build.gradle b/Reply/app/build.gradle index edec88bf..bccfdf88 100644 --- a/Reply/app/build.gradle +++ b/Reply/app/build.gradle @@ -46,29 +46,26 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - // Kotlin - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" // AndroidX - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.0-rc1' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.recyclerview:recyclerview:1.1.0' - implementation 'androidx.core:core-ktx:1.1.0' + implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.lifecycle:lifecycle-livedata-core-ktx:2.2.0' implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version" implementation "androidx.navigation:navigation-ui-ktx:$navigation_version" // Glide - implementation "com.github.bumptech.glide:glide:4.9.0" + implementation "com.github.bumptech.glide:glide:4.11.0" // Material Components - implementation 'com.google.android.material:material:1.2.0' + implementation 'com.google.android.material:material:1.2.1' // Testing - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + testImplementation 'junit:junit:4.13' + androidTestImplementation 'androidx.test:runner:1.3.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' } diff --git a/Reply/build.gradle b/Reply/build.gradle index 7a9282e2..4cd06457 100644 --- a/Reply/build.gradle +++ b/Reply/build.gradle @@ -14,15 +14,15 @@ buildscript { ext { - kotlin_version = '1.3.50' - navigation_version = '2.2.0' + kotlin_version = '1.4.10' + navigation_version = '2.3.1' } repositories { google() jcenter() } dependencies{ - classpath 'com.android.tools.build:gradle:4.0.1' + classpath 'com.android.tools.build:gradle:4.1.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version" @@ -37,7 +37,3 @@ allprojects { jcenter() } } - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/Reply/gradle.properties b/Reply/gradle.properties index dbf9c126..df995589 100644 --- a/Reply/gradle.properties +++ b/Reply/gradle.properties @@ -6,7 +6,6 @@ # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -android.enableJetifier=true android.useAndroidX=true org.gradle.jvmargs=-Xmx1536m # When configured, Gradle will run in incubating parallel mode. diff --git a/Reply/gradle/wrapper/gradle-wrapper.properties b/Reply/gradle/wrapper/gradle-wrapper.properties index 9334dd73..58947f54 100644 --- a/Reply/gradle/wrapper/gradle-wrapper.properties +++ b/Reply/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Aug 11 20:17:06 EDT 2020 +#Mon Nov 02 15:31:58 GMT 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip From 8ffec484d563069da7cccff09586fa173d329b8b Mon Sep 17 00:00:00 2001 From: Nick Rout Date: Thu, 12 Nov 2020 09:25:16 +0100 Subject: [PATCH 18/23] Add ShapeableImageView to component list --- .../ui/component/Component.kt | 3 +- .../ui/component/ComponentViewHolder.kt | 6 +++ .../src/main/res/layout/component_image.xml | 52 +++++++++++++++++++ .../app/src/main/res/values/shape.xml | 6 +++ .../app/src/main/res/values/strings.xml | 3 +- 5 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_image.xml diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/Component.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/Component.kt index a162d535..c8c33a75 100644 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/Component.kt +++ b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/Component.kt @@ -38,5 +38,6 @@ enum class Component { TABS, SNACKBAR, DIALOG, - BOTTOM_SHEET + BOTTOM_SHEET, + IMAGE } diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentViewHolder.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentViewHolder.kt index d0550c9e..d31fe47a 100644 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentViewHolder.kt +++ b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentViewHolder.kt @@ -48,6 +48,7 @@ import io.material.materialthemebuilder.ui.component.Component.TABS import io.material.materialthemebuilder.ui.component.Component.SNACKBAR import io.material.materialthemebuilder.ui.component.Component.DIALOG import io.material.materialthemebuilder.ui.component.Component.BOTTOM_SHEET +import io.material.materialthemebuilder.ui.component.Component.IMAGE /** * Sealed class to define all [RecyclerView.ViewHolder]s used to display [Component]s. @@ -179,6 +180,10 @@ sealed class ComponentViewHolder(val view: View) : RecyclerView.ViewHolder(view) } } + class ImageComponentViewHolder( + parent: ViewGroup + ) : ComponentViewHolder(inflate(parent, R.layout.component_image)) + companion object { fun create( parent: ViewGroup, @@ -202,6 +207,7 @@ sealed class ComponentViewHolder(val view: View) : RecyclerView.ViewHolder(view) SNACKBAR -> SnackbarComponentViewHolder(parent) DIALOG -> DialogComponentViewHolder(parent) BOTTOM_SHEET -> BottomSheetComponentViewHolder(parent, listener) + IMAGE -> ImageComponentViewHolder(parent) } } diff --git a/MaterialThemeBuilder/app/src/main/res/layout/component_image.xml b/MaterialThemeBuilder/app/src/main/res/layout/component_image.xml new file mode 100644 index 00000000..5808f63d --- /dev/null +++ b/MaterialThemeBuilder/app/src/main/res/layout/component_image.xml @@ -0,0 +1,52 @@ + + + + + + + + + + diff --git a/MaterialThemeBuilder/app/src/main/res/values/shape.xml b/MaterialThemeBuilder/app/src/main/res/values/shape.xml index 5fdfa264..277e613b 100644 --- a/MaterialThemeBuilder/app/src/main/res/values/shape.xml +++ b/MaterialThemeBuilder/app/src/main/res/values/shape.xml @@ -48,4 +48,10 @@ + + + diff --git a/MaterialThemeBuilder/app/src/main/res/values/strings.xml b/MaterialThemeBuilder/app/src/main/res/values/strings.xml index 429c20b4..5d66bc20 100644 --- a/MaterialThemeBuilder/app/src/main/res/values/strings.xml +++ b/MaterialThemeBuilder/app/src/main/res/values/strings.xml @@ -16,7 +16,7 @@ Build a Material Theme - Theme name... + Theme name… Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. @@ -88,6 +88,7 @@ Bottom sheet Show bottom sheet + Image Color scheme From fc6f455ec84df6d8056dbfa2f03a5bb45fd66ae2 Mon Sep 17 00:00:00 2001 From: Hunter Stich Date: Thu, 14 Jan 2021 15:38:16 -0500 Subject: [PATCH 19/23] Update Reply dependency versions --- Reply/app/build.gradle | 6 +++--- Reply/build.gradle | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Reply/app/build.gradle b/Reply/app/build.gradle index bccfdf88..027515bd 100644 --- a/Reply/app/build.gradle +++ b/Reply/app/build.gradle @@ -18,11 +18,11 @@ apply plugin: 'kotlin-kapt' apply plugin: "androidx.navigation.safeargs.kotlin" android { - compileSdkVersion 29 + compileSdkVersion 30 defaultConfig { applicationId "com.materialstudies.reply" minSdkVersion 23 - targetSdkVersion 29 + targetSdkVersion 30 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -65,7 +65,7 @@ dependencies { implementation 'com.google.android.material:material:1.2.1' // Testing - testImplementation 'junit:junit:4.13' + testImplementation 'junit:junit:4.13.1' androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' } diff --git a/Reply/build.gradle b/Reply/build.gradle index 4cd06457..1ef24fc2 100644 --- a/Reply/build.gradle +++ b/Reply/build.gradle @@ -14,15 +14,15 @@ buildscript { ext { - kotlin_version = '1.4.10' - navigation_version = '2.3.1' + kotlin_version = '1.4.21' + navigation_version = '2.3.2' } repositories { google() jcenter() } dependencies{ - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:4.1.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version" From 969d92e342a7b995329d6e5f835dbe0055aff47a Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Wed, 24 Feb 2021 09:57:53 -0800 Subject: [PATCH 20/23] Adds proper default branch name to yaml file --- Owl/.google/packaging.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Owl/.google/packaging.yaml b/Owl/.google/packaging.yaml index 19e04afc..08ccc281 100644 --- a/Owl/.google/packaging.yaml +++ b/Owl/.google/packaging.yaml @@ -21,5 +21,6 @@ categories: [Material Components] languages: [Kotlin] solutions: [Mobile] github: material-components/material-components-android-examples +branch: develop level: ADVANCED license: apache2 From 685e13d9e43c78ee3df186d0535fe5a04a31c4c6 Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Wed, 24 Feb 2021 09:59:49 -0800 Subject: [PATCH 21/23] Adds default branch --- Reply/.google/packaging.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Reply/.google/packaging.yaml b/Reply/.google/packaging.yaml index 19e04afc..08ccc281 100644 --- a/Reply/.google/packaging.yaml +++ b/Reply/.google/packaging.yaml @@ -21,5 +21,6 @@ categories: [Material Components] languages: [Kotlin] solutions: [Mobile] github: material-components/material-components-android-examples +branch: develop level: ADVANCED license: apache2 From 07e17b0fd649e3c5889359096f90ad3550712f07 Mon Sep 17 00:00:00 2001 From: Hunter Stich Date: Fri, 16 Apr 2021 09:17:08 -0400 Subject: [PATCH 22/23] [Owl] Update mdc version and remove obsolete manual insetting of BottomNavigationView. --- Owl/app/build.gradle | 2 +- Owl/app/src/main/res/layout/activity_main.xml | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/Owl/app/build.gradle b/Owl/app/build.gradle index ce4064c3..3fde4e10 100644 --- a/Owl/app/build.gradle +++ b/Owl/app/build.gradle @@ -54,7 +54,7 @@ dependencies { implementation 'androidx.fragment:fragment-ktx:1.2.5' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.core:core-ktx:1.5.0-alpha04' - implementation 'com.google.android.material:material:1.2.1' + implementation 'com.google.android.material:material:1.4.0-alpha02' implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation "androidx.navigation:navigation-runtime-ktx:$nav_version" diff --git a/Owl/app/src/main/res/layout/activity_main.xml b/Owl/app/src/main/res/layout/activity_main.xml index eacd808d..43c9d1f7 100644 --- a/Owl/app/src/main/res/layout/activity_main.xml +++ b/Owl/app/src/main/res/layout/activity_main.xml @@ -39,9 +39,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone" - app:paddingLeftSystemWindowInsets="@{true}" - app:paddingRightSystemWindowInsets="@{true}" - app:paddingBottomSystemWindowInsets="@{true}" app:menu="@menu/main"/> From b364b27637ae6782b5521ea6c3c02fa7ddc211ad Mon Sep 17 00:00:00 2001 From: Hunter Stich Date: Thu, 30 Sep 2021 14:37:59 -0400 Subject: [PATCH 23/23] Remove Material Theme Builder --- MaterialThemeBuilder/README.md | 34 --- MaterialThemeBuilder/app/build.gradle | 43 ---- MaterialThemeBuilder/app/proguard-rules.pro | 21 -- .../app/src/main/AndroidManifest.xml | 44 ---- .../app/src/main/ic_launcher-web.png | Bin 43199 -> 0 bytes .../io/material/materialthemebuilder/App.kt | 37 --- .../data/PreferenceRepository.kt | 73 ------ .../materialthemebuilder/ui/MainActivity.kt | 53 ----- .../ui/MainViewPagerAdapter.kt | 59 ----- .../ui/component/BottomSheetFragment.kt | 42 ---- .../ui/component/Component.kt | 43 ---- .../ui/component/ComponentAdapter.kt | 54 ----- .../ui/component/ComponentFragment.kt | 54 ----- .../ui/component/ComponentViewHolder.kt | 218 ------------------ .../ui/instruction/InstructionsFragment.kt | 54 ----- .../ui/themesummary/Subsystem.kt | 27 --- .../ui/themesummary/SubsystemAdapter.kt | 48 ---- .../ui/themesummary/SubsystemViewHolder.kt | 62 ----- .../ui/themesummary/ThemeSummaryFragment.kt | 50 ---- .../widget/ColorAttributeView.kt | 79 ------- .../widget/ColorDotView.kt | 86 ------- .../widget/LabelLinkView.kt | 97 -------- .../widget/ShapeAttributeView.kt | 134 ----------- .../widget/TypeAttributeView.kt | 93 -------- .../main/res/anim/bottom_sheet_slide_in.xml | 30 --- .../main/res/anim/bottom_sheet_slide_out.xml | 30 --- .../drawable-v24/ic_launcher_foreground.xml | 50 ---- .../res/drawable/ic_add_on_secondary_24dp.xml | 26 --- .../main/res/drawable/ic_bookmark_24dp.xml | 26 --- .../ic_bookmark_control_normal_24dp.xml | 26 --- .../drawable/ic_bookmark_on_surface_24dp.xml | 26 --- .../main/res/drawable/ic_colorize_24dp.xml | 26 --- .../drawable/ic_favorite_on_surface_24dp.xml | 26 --- .../main/res/drawable/ic_format_size_24dp.xml | 26 --- .../src/main/res/drawable/ic_inbox_24dp.xml | 26 --- .../res/drawable/ic_launcher_background.xml | 90 -------- .../res/drawable/ic_material_icon_24dp.xml | 28 --- .../drawable/ic_menu_control_normal_24dp.xml | 26 --- .../res/drawable/ic_menu_on_surface_24dp.xml | 26 --- .../drawable/ic_more_vert_on_surface_24dp.xml | 26 --- .../ic_music_note_on_surface_24dp.xml | 26 --- .../res/drawable/ic_news_on_surface_24dp.xml | 26 --- .../main/res/drawable/ic_open_in_new_24dp.xml | 26 --- .../res/drawable/ic_place_on_surface_24dp.xml | 26 --- .../res/drawable/ic_rounded_corner_24dp.xml | 26 --- .../ic_search_control_normal_24dp.xml | 26 --- .../drawable/ic_search_on_surface_24dp.xml | 26 --- .../src/main/res/drawable/ic_send_24dp.xml | 26 --- .../drawable/ic_share_control_normal_24dp.xml | 26 --- .../res/drawable/ic_share_on_surface_24dp.xml | 26 --- .../src/main/res/drawable/ic_star_24dp.xml | 26 --- .../src/main/res/drawable/sample_image.png | Bin 4780 -> 0 bytes .../src/main/res/font/roboto_black_italic.xml | 23 -- .../app/src/main/res/layout/activity_main.xml | 109 --------- .../layout/color_attribute_view_layout.xml | 37 --- .../res/layout/component_bottom_app_bar.xml | 67 ------ .../layout/component_bottom_navigation.xml | 47 ---- .../res/layout/component_bottom_sheet.xml | 47 ---- .../src/main/res/layout/component_buttons.xml | 108 --------- .../src/main/res/layout/component_cards.xml | 134 ----------- .../main/res/layout/component_checkbox.xml | 61 ----- .../src/main/res/layout/component_chips.xml | 77 ------- .../src/main/res/layout/component_dialog.xml | 47 ---- .../src/main/res/layout/component_drawer.xml | 61 ----- .../src/main/res/layout/component_fabs.xml | 80 ------- .../src/main/res/layout/component_image.xml | 52 ----- .../res/layout/component_radio_button.xml | 60 ----- .../main/res/layout/component_snackbar.xml | 47 ---- .../src/main/res/layout/component_switch.xml | 62 ----- .../src/main/res/layout/component_tabs.xml | 66 ------ .../main/res/layout/component_text_field.xml | 73 ------ .../main/res/layout/component_top_app_bar.xml | 50 ---- .../main/res/layout/drawer_header_layout.xml | 44 ---- .../main/res/layout/fragment_bottom_sheet.xml | 45 ---- .../main/res/layout/fragment_component.xml | 22 -- .../main/res/layout/fragment_instructions.xml | 83 ------- .../res/layout/fragment_theme_summary.xml | 22 -- .../src/main/res/layout/label_view_layout.xml | 55 ----- .../layout/shape_attribute_view_layout.xml | 40 ---- .../src/main/res/layout/subsystem_color.xml | 158 ------------- .../src/main/res/layout/subsystem_shape.xml | 74 ------ .../src/main/res/layout/subsystem_type.xml | 175 -------------- .../res/layout/type_attribute_view_layout.xml | 44 ---- .../src/main/res/menu/bottom_app_bar_menu.xml | 37 --- .../main/res/menu/bottom_navigation_menu.xml | 40 ---- .../main/res/menu/navigation_view_menu.xml | 40 ---- .../src/main/res/menu/top_app_bar_menu.xml | 37 --- .../res/mipmap-anydpi-v26/ic_launcher.xml | 21 -- .../mipmap-anydpi-v26/ic_launcher_round.xml | 21 -- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3592 -> 0 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 1935 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 3592 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2646 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 1108 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2646 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 5931 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 2961 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 5931 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 8430 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 4893 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 8430 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 13295 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 7912 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 13295 -> 0 bytes .../app/src/main/res/values-night/themes.xml | 36 --- .../app/src/main/res/values/attrs.xml | 61 ----- .../app/src/main/res/values/color.xml | 65 ------ .../app/src/main/res/values/dimens.xml | 27 --- .../app/src/main/res/values/font_certs.xml | 33 --- .../res/values/ic_launcher_background.xml | 20 -- .../app/src/main/res/values/motion.xml | 26 --- .../src/main/res/values/preloaded_fonts.xml | 22 -- .../app/src/main/res/values/shape.xml | 57 ----- .../app/src/main/res/values/strings.xml | 115 --------- .../app/src/main/res/values/styles.xml | 41 ---- .../app/src/main/res/values/themes.xml | 75 ------ .../app/src/main/res/values/type.xml | 92 -------- MaterialThemeBuilder/build.gradle | 38 --- MaterialThemeBuilder/gradle.properties | 16 -- .../gradle/wrapper/gradle-wrapper.jar | Bin 54329 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 - MaterialThemeBuilder/gradlew | 172 -------------- MaterialThemeBuilder/gradlew.bat | 84 ------- MaterialThemeBuilder/settings.gradle | 1 - 124 files changed, 5558 deletions(-) delete mode 100644 MaterialThemeBuilder/README.md delete mode 100644 MaterialThemeBuilder/app/build.gradle delete mode 100644 MaterialThemeBuilder/app/proguard-rules.pro delete mode 100644 MaterialThemeBuilder/app/src/main/AndroidManifest.xml delete mode 100644 MaterialThemeBuilder/app/src/main/ic_launcher-web.png delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/App.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/data/PreferenceRepository.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainActivity.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainViewPagerAdapter.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/BottomSheetFragment.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/Component.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentAdapter.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentFragment.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentViewHolder.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/instruction/InstructionsFragment.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/Subsystem.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/SubsystemAdapter.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/SubsystemViewHolder.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/ThemeSummaryFragment.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/ColorAttributeView.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/ColorDotView.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/LabelLinkView.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/ShapeAttributeView.kt delete mode 100644 MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/TypeAttributeView.kt delete mode 100644 MaterialThemeBuilder/app/src/main/res/anim/bottom_sheet_slide_in.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/anim/bottom_sheet_slide_out.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable-v24/ic_launcher_foreground.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_add_on_secondary_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_bookmark_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_bookmark_control_normal_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_bookmark_on_surface_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_colorize_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_favorite_on_surface_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_format_size_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_inbox_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_launcher_background.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_material_icon_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_menu_control_normal_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_menu_on_surface_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_more_vert_on_surface_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_music_note_on_surface_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_news_on_surface_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_open_in_new_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_place_on_surface_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_rounded_corner_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_search_control_normal_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_search_on_surface_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_send_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_share_control_normal_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_share_on_surface_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/ic_star_24dp.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/drawable/sample_image.png delete mode 100644 MaterialThemeBuilder/app/src/main/res/font/roboto_black_italic.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/activity_main.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/color_attribute_view_layout.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_bottom_app_bar.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_bottom_navigation.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_bottom_sheet.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_buttons.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_cards.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_checkbox.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_chips.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_dialog.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_drawer.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_fabs.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_image.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_radio_button.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_snackbar.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_switch.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_tabs.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_text_field.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/component_top_app_bar.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/drawer_header_layout.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/fragment_bottom_sheet.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/fragment_component.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/fragment_instructions.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/fragment_theme_summary.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/label_view_layout.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/shape_attribute_view_layout.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/subsystem_color.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/subsystem_shape.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/subsystem_type.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/layout/type_attribute_view_layout.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/menu/bottom_app_bar_menu.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/menu/bottom_navigation_menu.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/menu/navigation_view_menu.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/menu/top_app_bar_menu.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-hdpi/ic_launcher_round.png delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-mdpi/ic_launcher_round.png delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png delete mode 100644 MaterialThemeBuilder/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 MaterialThemeBuilder/app/src/main/res/values-night/themes.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/values/attrs.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/values/color.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/values/dimens.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/values/font_certs.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/values/ic_launcher_background.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/values/motion.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/values/preloaded_fonts.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/values/shape.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/values/strings.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/values/styles.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/values/themes.xml delete mode 100644 MaterialThemeBuilder/app/src/main/res/values/type.xml delete mode 100644 MaterialThemeBuilder/build.gradle delete mode 100644 MaterialThemeBuilder/gradle.properties delete mode 100644 MaterialThemeBuilder/gradle/wrapper/gradle-wrapper.jar delete mode 100644 MaterialThemeBuilder/gradle/wrapper/gradle-wrapper.properties delete mode 100644 MaterialThemeBuilder/gradlew delete mode 100644 MaterialThemeBuilder/gradlew.bat delete mode 100644 MaterialThemeBuilder/settings.gradle diff --git a/MaterialThemeBuilder/README.md b/MaterialThemeBuilder/README.md deleted file mode 100644 index 7d172a0a..00000000 --- a/MaterialThemeBuilder/README.md +++ /dev/null @@ -1,34 +0,0 @@ -## Build a Material Theme -Build a Material Theme lets you create your own Material theme by customizing values for color, typography, and shape. See how these values appear when applied to Material Components and discover how to implement your custom theme in your own projects. Build a Material Theme is also available for the web as a remixable project on [Glitch](https://glitch.com/~material-theme-builder). - -## Overview -Material Components for Android supports Material Theming by exposing top level theme attributes for color, typography and shape. Customizing these attributes will apply your custom theme throughout your entire app. - -This project shows how you can organize and use your theme and style resources to take advantage of the robust support for theming in Material Components for Android. - -## Change values for typography, shape, and color -By default, apps built with Material Components inherit our baseline theme values. To begin customizing, override properties in `color.xml`, `type.xml` and `shape.xml`. Each file includes detailed comments that illustrate how each subsystem can be customized. - -### type.xml -To change your theme’s typography, we recommend using [Google Fonts](https://fonts.google.com/) and choosing a font family that best reflects your style. Set TextApperances to use your custom font and additional type properties to apply a custom type scale globally. [Learn how to add fonts in Android Studio](https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts) - -### shape.xml -To systematically apply shape throughout your app, it helps to understand that components are grouped by size into categories of small, medium and large. The shape of each component size group can be themed by customizing its ShapeApperance style. We recommend using our [shape customization tool](https://material.io/design/shape/about-shape.html#shape-customization-tool) to help you pick your corner family and size values. - -### color.xml -To change your theme's color scheme, replace the existing HEX color values with your custom HEX values. This project has both light and dark themes, toggle between them within the app to see your changes. Use our [color palette generator](https://material.io/design/color/the-color-system.html#tools-for-picking-colors) to help come up with pairings and check your color contrast. - -## Get Started -Clone the material-components-android-examples repository - -``` -git clone https://github.com/material-components/material-components-android-examples.git -``` - -In Android Studio - Choose ‘Open an existing Android Studio Project’ and select ‘material-components-android-examples/MaterialThemeBuilder’ - -Sync, build and run the project. The project, by default, will be configured with the baseline Material theme. - -Under the ‘res’ folder, open `color.xml`, `type.xml` and `shape.xml`. Each file has detailed comments describing the Material subsystem it controls. Try modifying each subsystem, re-running the app and seeing how changes are propagated throughout the app. - -Once you build your Material theme, move the theme resources (`color.xml`, `type.xml`, `shape.xml`, `styles.xml`, `themes.xml` and `night/themes.xml`) over to your app to start using your Material theme in your own projects. diff --git a/MaterialThemeBuilder/app/build.gradle b/MaterialThemeBuilder/app/build.gradle deleted file mode 100644 index f5298326..00000000 --- a/MaterialThemeBuilder/app/build.gradle +++ /dev/null @@ -1,43 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' - -android { - compileSdkVersion 30 - defaultConfig { - applicationId "io.material.materialthemebuilder" - minSdkVersion 23 - targetSdkVersion 30 - versionCode 1 - versionName "1.0" - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - kotlinOptions { - jvmTarget = "1.8" - } -} - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - - // Kotlin - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - - // AndroidX - implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.2' - implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha06' - implementation 'androidx.core:core-ktx:1.3.2' - - //MDC - implementation 'com.google.android.material:material:1.2.1' -} diff --git a/MaterialThemeBuilder/app/proguard-rules.pro b/MaterialThemeBuilder/app/proguard-rules.pro deleted file mode 100644 index f1b42451..00000000 --- a/MaterialThemeBuilder/app/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/MaterialThemeBuilder/app/src/main/AndroidManifest.xml b/MaterialThemeBuilder/app/src/main/AndroidManifest.xml deleted file mode 100644 index 5d1010f9..00000000 --- a/MaterialThemeBuilder/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/MaterialThemeBuilder/app/src/main/ic_launcher-web.png b/MaterialThemeBuilder/app/src/main/ic_launcher-web.png deleted file mode 100644 index ab7a270e6842e61e8f9b14d1d14a2f16e98a0748..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43199 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 = MutableLiveData() - val nightModeLive: LiveData - get() = _nightModeLive - - var isDarkTheme: Boolean = false - get() = nightMode == AppCompatDelegate.MODE_NIGHT_YES - set(value) { - sharedPreferences.edit().putInt(PREFERENCE_NIGHT_MODE, if (value) { - AppCompatDelegate.MODE_NIGHT_YES - } else { - AppCompatDelegate.MODE_NIGHT_NO - }).apply() - field = value - } - - private val _isDarkThemeLive: MutableLiveData = MutableLiveData() - val isDarkThemeLive: LiveData - get() = _isDarkThemeLive - - private val preferenceChangedListener = - SharedPreferences.OnSharedPreferenceChangeListener { _, key -> - when (key) { - PREFERENCE_NIGHT_MODE -> { - _nightModeLive.value = nightMode - _isDarkThemeLive.value = isDarkTheme - } - } - } - - init { - // Init preference LiveData objects. - _nightModeLive.value = nightMode - _isDarkThemeLive.value = isDarkTheme - - sharedPreferences.registerOnSharedPreferenceChangeListener(preferenceChangedListener) - } - - companion object { - private const val PREFERENCE_NIGHT_MODE = "preference_night_mode" - private const val PREFERENCE_NIGHT_MODE_DEF_VAL = AppCompatDelegate.MODE_NIGHT_NO - } -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainActivity.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainActivity.kt deleted file mode 100644 index 0831f11a..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainActivity.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.ui - -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle -import com.google.android.material.tabs.TabLayout -import androidx.viewpager.widget.ViewPager -import io.material.materialthemebuilder.R -import io.material.materialthemebuilder.App -import io.material.materialthemebuilder.ui.instruction.InstructionsFragment -import io.material.materialthemebuilder.ui.themesummary.ThemeSummaryFragment -import io.material.materialthemebuilder.ui.component.ComponentFragment - -/** - * Single activity which contains the [MainViewPagerAdapter] that shows the [InstructionsFragment], - * [ThemeSummaryFragment] and [ComponentFragment]. - */ -class MainActivity : AppCompatActivity() { - - private lateinit var viewPager: ViewPager - private lateinit var tabLayout: TabLayout - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - viewPager = findViewById(R.id.view_pager) - tabLayout = findViewById(R.id.tab_layout) - - tabLayout.setupWithViewPager(viewPager) - val adapter = MainViewPagerAdapter(this, supportFragmentManager) - viewPager.adapter = adapter - - (application as App).preferenceRepository - .nightModeLive.observe(this) { nightMode -> - nightMode?.let { delegate.localNightMode = it } - } - } -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainViewPagerAdapter.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainViewPagerAdapter.kt deleted file mode 100644 index 985f36d6..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/MainViewPagerAdapter.kt +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.ui - -import android.content.Context -import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentManager -import androidx.fragment.app.FragmentStatePagerAdapter -import io.material.materialthemebuilder.R -import io.material.materialthemebuilder.ui.component.ComponentFragment -import io.material.materialthemebuilder.ui.instruction.InstructionsFragment -import io.material.materialthemebuilder.ui.themesummary.ThemeSummaryFragment - -/** - * View pager to show all tabbed destinations - Instructions, Theme Summary and Components. - */ -class MainViewPagerAdapter( - private val context: Context, - fragmentManager: FragmentManager -) : FragmentStatePagerAdapter(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { - - enum class MainFragments(val titleRes: Int) { - INSTRUCTIONS(R.string.tab_title_instructions), - THEME_SUMMARY(R.string.tab_title_theme_summary), - COMPONENTS(R.string.tab_title_components) - } - - override fun getCount(): Int = MainFragments.values().size - - private fun getItemType(position: Int): MainFragments { - return MainFragments.values()[position] - } - - override fun getPageTitle(position: Int): CharSequence? { - return context.getString(getItemType(position).titleRes) - } - - override fun getItem(position: Int): Fragment { - return when (getItemType(position)) { - MainFragments.INSTRUCTIONS -> InstructionsFragment() - MainFragments.THEME_SUMMARY -> ThemeSummaryFragment() - MainFragments.COMPONENTS -> ComponentFragment() - } - } -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/BottomSheetFragment.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/BottomSheetFragment.kt deleted file mode 100644 index 81d46fad..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/BottomSheetFragment.kt +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.ui.component - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import io.material.materialthemebuilder.R - -/** - * A simple Modal Bottom Sheet. - */ -class BottomSheetFragment : BottomSheetDialogFragment() { - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_bottom_sheet, container, false) - } - - companion object { - const val FRAGMENT_TAG = "bottom_sheet_fragment_tag" - } -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/Component.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/Component.kt deleted file mode 100644 index c8c33a75..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/Component.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.ui.component - -/** - * Enumeration of all components to be displayed by [ComponentAdapter]. - * - * All components in this enum will be shown by [ComponentAdapter]. The order of the components - * here will be the order they are displayed in by [ComponentAdapter]. - */ -enum class Component { - BUTTON, - FAB, - CARD, - TOP_APP_BAR, - CHIP, - DRAWER, - TEXT_FIELD, - BOTTOM_NAVIGATION, - SWITCH, - RADIO_BUTTON, - CHECKBOX, - BOTTOM_APP_BAR, - TABS, - SNACKBAR, - DIALOG, - BOTTOM_SHEET, - IMAGE -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentAdapter.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentAdapter.kt deleted file mode 100644 index d8a88530..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentAdapter.kt +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.ui.component - -import android.view.ViewGroup -import androidx.recyclerview.widget.DiffUtil -import androidx.recyclerview.widget.ListAdapter - -/** - * An adapter to display all [Component]s using their corresponding [ComponentViewHolder]. - */ -class ComponentAdapter( - private val listener: ComponentAdapterListener -) : ListAdapter(DIFF_CALLBACK) { - - interface ComponentAdapterListener { - fun onShowBottomSheetClicked() - } - - override fun getItemViewType(position: Int): Int = getItem(position).ordinal - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ComponentViewHolder { - return ComponentViewHolder.create(parent, viewType, listener) - } - - override fun onBindViewHolder(holder: ComponentViewHolder, position: Int) { - holder.bind(getItem(position)) - } - - companion object { - private val DIFF_CALLBACK = object : DiffUtil.ItemCallback() { - override fun areItemsTheSame(oldItem: Component, newItem: Component): Boolean { - return oldItem == newItem - } - override fun areContentsTheSame(oldItem: Component, newItem: Component): Boolean { - return oldItem == newItem - } - } - } -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentFragment.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentFragment.kt deleted file mode 100644 index 6db56fdf..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentFragment.kt +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.ui.component - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment -import androidx.recyclerview.widget.RecyclerView -import androidx.recyclerview.widget.LinearLayoutManager -import io.material.materialthemebuilder.R - -/** - * Fragment to hold a list of all [Component]s. - */ -class ComponentFragment : Fragment(), ComponentAdapter.ComponentAdapterListener { - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_component, container, false) - } - - override fun onViewCreated(view: View, savedInstanceBundle: Bundle?) { - super.onViewCreated(view, savedInstanceBundle) - - val recyclerView: RecyclerView = view.findViewById(R.id.recycler_view) - val adapter = ComponentAdapter(this) - recyclerView.layoutManager = LinearLayoutManager(requireContext()) - recyclerView.adapter = adapter - adapter.submitList(Component.values().toList()) - } - - override fun onShowBottomSheetClicked() { - BottomSheetFragment().show(requireFragmentManager(), BottomSheetFragment.FRAGMENT_TAG) - } -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentViewHolder.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentViewHolder.kt deleted file mode 100644 index d31fe47a..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/component/ComponentViewHolder.kt +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.ui.component - -import android.annotation.SuppressLint -import android.view.Gravity -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.FrameLayout -import androidx.core.content.ContextCompat -import androidx.core.view.GravityCompat -import androidx.drawerlayout.widget.DrawerLayout -import androidx.recyclerview.widget.RecyclerView -import com.google.android.material.bottomappbar.BottomAppBar -import com.google.android.material.button.MaterialButton -import com.google.android.material.dialog.MaterialAlertDialogBuilder -import com.google.android.material.navigation.NavigationView -import com.google.android.material.snackbar.Snackbar -import io.material.materialthemebuilder.R -import io.material.materialthemebuilder.ui.component.Component.BUTTON -import io.material.materialthemebuilder.ui.component.Component.FAB -import io.material.materialthemebuilder.ui.component.Component.CARD -import io.material.materialthemebuilder.ui.component.Component.TOP_APP_BAR -import io.material.materialthemebuilder.ui.component.Component.CHIP -import io.material.materialthemebuilder.ui.component.Component.DRAWER -import io.material.materialthemebuilder.ui.component.Component.TEXT_FIELD -import io.material.materialthemebuilder.ui.component.Component.BOTTOM_NAVIGATION -import io.material.materialthemebuilder.ui.component.Component.SWITCH -import io.material.materialthemebuilder.ui.component.Component.RADIO_BUTTON -import io.material.materialthemebuilder.ui.component.Component.CHECKBOX -import io.material.materialthemebuilder.ui.component.Component.BOTTOM_APP_BAR -import io.material.materialthemebuilder.ui.component.Component.TABS -import io.material.materialthemebuilder.ui.component.Component.SNACKBAR -import io.material.materialthemebuilder.ui.component.Component.DIALOG -import io.material.materialthemebuilder.ui.component.Component.BOTTOM_SHEET -import io.material.materialthemebuilder.ui.component.Component.IMAGE - -/** - * Sealed class to define all [RecyclerView.ViewHolder]s used to display [Component]s. - */ -sealed class ComponentViewHolder(val view: View) : RecyclerView.ViewHolder(view) { - - open fun bind(component: Component) { - // Override in subclass if needed. - } - - class ButtonComponentViewHolder( - parent: ViewGroup - ) : ComponentViewHolder(inflate(parent, R.layout.component_buttons)) - - class FabComponentViewHolder( - parent: ViewGroup - ) : ComponentViewHolder(inflate(parent, R.layout.component_fabs)) - - class CardComponentViewHolder( - parent: ViewGroup - ) : ComponentViewHolder(inflate(parent, R.layout.component_cards)) - - class TopAppBarComponentViewHolder( - parent: ViewGroup - ) : ComponentViewHolder(inflate(parent, R.layout.component_top_app_bar)) - - class ChipComponentViewHolder( - parent: ViewGroup - ) : ComponentViewHolder(inflate(parent, R.layout.component_chips)) - - class DrawerComponentViewHolder( - parent: ViewGroup - ) : ComponentViewHolder(inflate(parent, R.layout.component_drawer)) { - private val drawerLayout: DrawerLayout = view.findViewById(R.id.drawer_layout) - private val navigationView: NavigationView = view.findViewById(R.id.nav_view) - - override fun bind(component: Component) { - drawerLayout.openDrawer(GravityCompat.START) - navigationView.setNavigationItemSelectedListener { true } - navigationView.setCheckedItem(R.id.nav_item_one) - } - } - - class TextFieldComponentViewHolder( - parent: ViewGroup - ) : ComponentViewHolder(inflate(parent, R.layout.component_text_field)) - - class BottomNavigationComponentViewHolder( - parent: ViewGroup - ) : ComponentViewHolder(inflate(parent, R.layout.component_bottom_navigation)) - - class SwitchComponentViewHolder( - parent: ViewGroup - ) : ComponentViewHolder(inflate(parent, R.layout.component_switch)) - - class RadioButtonComponentViewHolder( - parent: ViewGroup - ) : ComponentViewHolder(inflate(parent, R.layout.component_radio_button)) - - class CheckboxComponentViewHolder( - parent: ViewGroup - ) : ComponentViewHolder(inflate(parent, R.layout.component_checkbox)) - - class BottomAppBarComponentViewHolder( - parent: ViewGroup - ) : ComponentViewHolder(inflate(parent, R.layout.component_bottom_app_bar)) { - private val bottomAppBar: BottomAppBar = view.findViewById(R.id.bottom_app_bar) - - override fun bind(component: Component) { - bottomAppBar.overflowIcon = ContextCompat.getDrawable( - bottomAppBar.context, - R.drawable.ic_more_vert_on_surface_24dp - ) - } - } - - class TabsComponentViewHolder( - parent: ViewGroup - ) : ComponentViewHolder(inflate(parent, R.layout.component_tabs)) - - @SuppressLint("ShowToast") - class SnackbarComponentViewHolder( - parent: ViewGroup - ) : ComponentViewHolder(inflate(parent, R.layout.component_snackbar)) { - - init { - val container: FrameLayout = view.findViewById(R.id.snackbar_container) - val snackbarView = Snackbar.make( - container, - R.string.snackbar_message_text, - Snackbar.LENGTH_INDEFINITE - ) - .setAction(R.string.snackbar_action_text) { } - .view - (snackbarView.layoutParams as FrameLayout.LayoutParams).gravity = Gravity.CENTER - - container.addView(snackbarView) - } - } - - class DialogComponentViewHolder( - parent: ViewGroup - ) : ComponentViewHolder(inflate(parent, R.layout.component_dialog)) { - init { - val button = view.findViewById(R.id.button) - button.setOnClickListener { - showDialog() - } - } - - private fun showDialog() { - MaterialAlertDialogBuilder(view.context) - .setTitle(R.string.text_headline_6) - .setMessage(R.string.lorem_ipsum) - .setPositiveButton(R.string.text_button, null) - .setNegativeButton(R.string.text_button, null) - .show() - } - } - - class BottomSheetComponentViewHolder( - parent: ViewGroup, - listener: ComponentAdapter.ComponentAdapterListener - ) : ComponentViewHolder(inflate(parent, R.layout.component_bottom_sheet)) { - init { - view.findViewById(R.id.button).setOnClickListener { - listener.onShowBottomSheetClicked() - } - } - } - - class ImageComponentViewHolder( - parent: ViewGroup - ) : ComponentViewHolder(inflate(parent, R.layout.component_image)) - - companion object { - fun create( - parent: ViewGroup, - viewType: Int, - listener: ComponentAdapter.ComponentAdapterListener - ): ComponentViewHolder { - return when (Component.values()[viewType]) { - BUTTON -> ButtonComponentViewHolder(parent) - FAB -> FabComponentViewHolder(parent) - CARD -> CardComponentViewHolder(parent) - TOP_APP_BAR -> TopAppBarComponentViewHolder(parent) - CHIP -> ChipComponentViewHolder(parent) - DRAWER -> DrawerComponentViewHolder(parent) - TEXT_FIELD -> TextFieldComponentViewHolder(parent) - BOTTOM_NAVIGATION -> BottomNavigationComponentViewHolder(parent) - SWITCH -> SwitchComponentViewHolder(parent) - RADIO_BUTTON -> RadioButtonComponentViewHolder(parent) - CHECKBOX -> CheckboxComponentViewHolder(parent) - BOTTOM_APP_BAR -> BottomAppBarComponentViewHolder(parent) - TABS -> TabsComponentViewHolder(parent) - SNACKBAR -> SnackbarComponentViewHolder(parent) - DIALOG -> DialogComponentViewHolder(parent) - BOTTOM_SHEET -> BottomSheetComponentViewHolder(parent, listener) - IMAGE -> ImageComponentViewHolder(parent) - } - } - - private fun inflate(parent: ViewGroup, layout: Int): View { - return LayoutInflater.from(parent.context).inflate(layout, parent, false) - } - } -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/instruction/InstructionsFragment.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/instruction/InstructionsFragment.kt deleted file mode 100644 index 2f6b6631..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/instruction/InstructionsFragment.kt +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.ui.instruction - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment -import com.google.android.material.switchmaterial.SwitchMaterial -import io.material.materialthemebuilder.App -import io.material.materialthemebuilder.R - -/** - * Fragment to display static instructions text and in-app theming options. - */ -class InstructionsFragment : Fragment() { - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_instructions, container, false) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - val darkThemeSwitch: SwitchMaterial = view.findViewById(R.id.dark_theme_switch) - val preferenceRepository = (requireActivity().application as App).preferenceRepository - - preferenceRepository.isDarkThemeLive.observe(this) { isDarkTheme -> - isDarkTheme?.let { darkThemeSwitch.isChecked = it } - } - - darkThemeSwitch.setOnCheckedChangeListener { _, checked -> - preferenceRepository.isDarkTheme = checked - } - } -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/Subsystem.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/Subsystem.kt deleted file mode 100644 index 79c783d6..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/Subsystem.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.ui.themesummary - -/** - * Enumeration of all subsystems to be displayed by [SubsystemAdapter]. - * - * All components in this enum will be shown by [SubsystemAdapter]. The order or the components - * here will be the order they are displayed in by [SubsystemAdapter]. - */ -enum class Subsystem { - COLOR, SHAPE, TYPE -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/SubsystemAdapter.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/SubsystemAdapter.kt deleted file mode 100644 index 518e0af5..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/SubsystemAdapter.kt +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.ui.themesummary - -import android.view.ViewGroup -import androidx.recyclerview.widget.DiffUtil -import androidx.recyclerview.widget.ListAdapter - -/** - * Adapter to display [Subsystem]s using their corresponding [SubsystemViewHolder]. - */ -class SubsystemAdapter : ListAdapter(DIFF_CALLBACK) { - - override fun getItemViewType(position: Int): Int = getItem(position).ordinal - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SubsystemViewHolder { - return SubsystemViewHolder.create(parent, viewType) - } - - override fun onBindViewHolder(holder: SubsystemViewHolder, position: Int) { - holder.bind(getItem(position)) - } - - companion object { - private val DIFF_CALLBACK = object : DiffUtil.ItemCallback() { - override fun areItemsTheSame(oldItem: Subsystem, newItem: Subsystem): Boolean { - return oldItem == newItem - } - override fun areContentsTheSame(oldItem: Subsystem, newItem: Subsystem): Boolean { - return oldItem == newItem - } - } - } -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/SubsystemViewHolder.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/SubsystemViewHolder.kt deleted file mode 100644 index 9cddee20..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/SubsystemViewHolder.kt +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.ui.themesummary - -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import io.material.materialthemebuilder.R -import io.material.materialthemebuilder.ui.themesummary.Subsystem.COLOR -import io.material.materialthemebuilder.ui.themesummary.Subsystem.TYPE -import io.material.materialthemebuilder.ui.themesummary.Subsystem.SHAPE - -/** - * Sealed class to define all [RecyclerView.ViewHolder]s used to display [Subsystem]s. - */ -sealed class SubsystemViewHolder(val view: View) : RecyclerView.ViewHolder(view) { - - open fun bind(subsystem: Subsystem) { - // Override in subclass if needed. - } - - class ColorSubsystemViewHolder( - parent: ViewGroup - ) : SubsystemViewHolder(inflate(parent, R.layout.subsystem_color)) - - class TypeSubsystemViewHolder( - parent: ViewGroup - ) : SubsystemViewHolder(inflate(parent, R.layout.subsystem_type)) - - class ShapeSubsystemViewHolder( - parent: ViewGroup - ) : SubsystemViewHolder(inflate(parent, R.layout.subsystem_shape)) - - companion object { - fun create(parent: ViewGroup, viewType: Int): SubsystemViewHolder { - return when (Subsystem.values()[viewType]) { - COLOR -> ColorSubsystemViewHolder(parent) - TYPE -> TypeSubsystemViewHolder(parent) - SHAPE -> ShapeSubsystemViewHolder(parent) - } - } - - private fun inflate(parent: ViewGroup, layout: Int): View { - return LayoutInflater.from(parent.context).inflate(layout, parent, false) - } - } -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/ThemeSummaryFragment.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/ThemeSummaryFragment.kt deleted file mode 100644 index a709a2ec..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/ui/themesummary/ThemeSummaryFragment.kt +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.ui.themesummary - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView -import io.material.materialthemebuilder.R - -/** - * Fragment to display a list of subsystems that show the values of this app's theme. - */ -class ThemeSummaryFragment : Fragment() { - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - return inflater.inflate(R.layout.fragment_theme_summary, container, false) - } - - override fun onViewCreated(view: View, savedInstanceBundle: Bundle?) { - super.onViewCreated(view, savedInstanceBundle) - - val adapter = SubsystemAdapter() - val recyclerView: RecyclerView = view.findViewById(R.id.recycler_view) - recyclerView.layoutManager = LinearLayoutManager(requireContext()) - recyclerView.adapter = adapter - adapter.submitList(Subsystem.values().toList()) - } -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/ColorAttributeView.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/ColorAttributeView.kt deleted file mode 100644 index 88a273b6..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/ColorAttributeView.kt +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.widget - -import android.content.Context -import android.graphics.Color -import android.util.AttributeSet -import android.view.View -import android.widget.FrameLayout -import androidx.appcompat.widget.AppCompatTextView -import io.material.materialthemebuilder.R - -/** - * Composite view to show an item containing a text label and a [ColorDotView]. - */ -class ColorAttributeView @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttr: Int = 0, - defStyleRes: Int = 0 -) : FrameLayout(context, attrs, defStyleAttr, defStyleRes) { - - private val colorAttributeTextView: AppCompatTextView - private val colorDotView: ColorDotView - - private var attributeText: String = "" - set(value) { - colorAttributeTextView.text = value - field = value - } - - private var dotFillColor: Int = Color.LTGRAY - set(value) { - colorDotView.fillColor = value - field = value - } - - private var dotStrokeColor: Int = Color.DKGRAY - set(value) { - colorDotView.strokeColor = value - field = value - } - - init { - val view = View.inflate(context, R.layout.color_attribute_view_layout, this) - colorAttributeTextView = view.findViewById(R.id.color_attribute) - colorDotView = view.findViewById(R.id.color_dot) - - val a = context.theme.obtainStyledAttributes( - attrs, - R.styleable.ColorAttributeView, - defStyleAttr, - defStyleRes - ) - attributeText = a.getString( - R.styleable.ColorAttributeView_android_text - ) ?: attributeText - dotFillColor = a.getColor(R.styleable.ColorAttributeView_colorFillColor, dotFillColor) - dotStrokeColor = a.getColor( - R.styleable.ColorAttributeView_colorStrokeColor, - dotStrokeColor - ) - a.recycle() - } -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/ColorDotView.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/ColorDotView.kt deleted file mode 100644 index 02941a9e..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/ColorDotView.kt +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.widget - -import android.content.Context -import android.graphics.Canvas -import android.graphics.Color -import android.graphics.Paint -import android.util.AttributeSet -import android.view.View -import io.material.materialthemebuilder.R - -/** - * Simple view that draws a filled circle with a stroke. - */ -class ColorDotView @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttr: Int = 0 -) : View(context, attrs, defStyleAttr) { - - var fillColor: Int = Color.LTGRAY - set(value) { - paintFill.color = value - field = value - } - - var strokeColor: Int = Color.DKGRAY - set(value) { - paintStroke.color = value - field = value - } - - private val paintFill = Paint(Paint.ANTI_ALIAS_FLAG).apply { - style = Paint.Style.FILL - color = Color.RED - } - - private val paintStroke = Paint(Paint.ANTI_ALIAS_FLAG).apply { - style = Paint.Style.STROKE - color = Color.BLACK - } - - private var cx: Float = 0F - private var cy: Float = 0F - private var radius: Float = 0F - - init { - val a = context.theme.obtainStyledAttributes( - attrs, - R.styleable.ColorDotView, - defStyleAttr, - 0 - ) - fillColor = a.getColor(R.styleable.ColorDotView_colorFillColor, fillColor) - strokeColor = a.getColor(R.styleable.ColorDotView_colorStrokeColor, strokeColor) - a.recycle() - } - - override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { - super.onSizeChanged(w, h, oldw, oldh) - cx = w / 2F - cy = h / 2F - // Decreases our circle's radius slightly so our stroke doesn't get clipped. - radius = (w / 2F) - 1F - } - - override fun onDraw(canvas: Canvas) { - canvas.drawCircle(cx, cy, radius, paintFill) - canvas.drawCircle(cx, cy, radius, paintStroke) - } -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/LabelLinkView.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/LabelLinkView.kt deleted file mode 100644 index 63c26f5a..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/LabelLinkView.kt +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.widget - -import android.content.Context -import android.content.Intent -import android.graphics.drawable.Drawable -import android.net.Uri -import android.util.AttributeSet -import android.view.View -import android.widget.LinearLayout -import androidx.appcompat.widget.AppCompatTextView -import androidx.appcompat.widget.AppCompatImageView -import io.material.materialthemebuilder.R - -/** - * Composite view to show an (optional) leading icon, followed by a text label, followed by - * a trailing icon. - * - * Clicking on this view's trailing icon will launch [linkUrl]. - */ -class LabelLinkView @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttr: Int = 0, - defStyleRes: Int = 0 -) : LinearLayout(context, attrs, defStyleAttr, defStyleRes) { - - private val leadingImageView: AppCompatImageView - private val labelTextView: AppCompatTextView - private val trailingImageView: AppCompatImageView - - private var leadingIcon: Drawable? = null - set(value) { - if (value == null) { - leadingImageView.visibility = View.GONE - } else { - leadingImageView.setImageDrawable(value) - leadingImageView.visibility = View.VISIBLE - } - field = value - } - - private var label: String = "" - set(value) { - labelTextView.text = value - field = value - } - - private var linkUrl: String = "" - - private val onLinkClickedListener = OnClickListener { - if (linkUrl.isBlank()) return@OnClickListener - - launchUrl(linkUrl) - } - - init { - clipToPadding = false - orientation = HORIZONTAL - - val view = View.inflate(context, R.layout.label_view_layout, this) - leadingImageView = view.findViewById(R.id.label_leading_image_view) - labelTextView = view.findViewById(R.id.label_text_view) - trailingImageView = view.findViewById(R.id.label_trailing_image_view) - trailingImageView.setOnClickListener(onLinkClickedListener) - - val a = context.theme.obtainStyledAttributes( - attrs, - R.styleable.LabelLinkView, - defStyleAttr, - defStyleRes - ) - leadingIcon = a.getDrawable(R.styleable.LabelLinkView_leadingIcon) - label = a.getString(R.styleable.LabelLinkView_android_text) ?: label - linkUrl = a.getString(R.styleable.LabelLinkView_linkUrl) ?: linkUrl - a.recycle() - } - - private fun launchUrl(urlString: String) { - context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(urlString))) - } -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/ShapeAttributeView.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/ShapeAttributeView.kt deleted file mode 100644 index 84144b82..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/ShapeAttributeView.kt +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.widget - -import android.content.Context -import android.content.res.ColorStateList -import android.graphics.Color -import com.google.android.material.shape.MaterialShapeDrawable -import com.google.android.material.shape.ShapeAppearanceModel -import androidx.core.view.ViewCompat -import androidx.appcompat.widget.AppCompatTextView -import android.util.AttributeSet -import android.view.View -import android.widget.FrameLayout -import io.material.materialthemebuilder.R - -/** - * A composite view to display a text label and a shape preview view. - * - * The shape preview view is used to visualize the properties of shapeAppearance theme attributes. - * The shape preview view is a TextView with it's background set to a MaterialShapeDrawable, - * inflated according to this view's app:shapeAppearanceAttr property. - */ -class ShapeAttributeView @JvmOverloads constructor( - context: Context, - private val attrs: AttributeSet? = null, - private val defStyleAttr: Int = 0, - defStyleRes: Int = 0 -) : FrameLayout(context, attrs, defStyleAttr, defStyleRes) { - - private val shapeAttributeTextView: AppCompatTextView - private val shapePreviewView: AppCompatTextView - - var shapeAttrText: String = "?shapeAppearanceSmallComponent" - set(value) { - shapeAttributeTextView.text = value - field = value - } - - private var shape = MaterialShapeDrawable().apply { - strokeWidth = DEFAULT_SHAPE_STROKE_WIDTH - } - - var shapeAppearanceRes: Int = R.attr.shapeAppearanceSmallComponent - set(value) { - shape.shapeAppearanceModel = ShapeAppearanceModel.builder( - context, - attrs, - defStyleAttr, - getShapeAppearanceDefaultRes(value) - ).build() - - ViewCompat.setBackground(shapePreviewView, shape) - - field = value - } - - var shapeFillColor: Int = Color.LTGRAY - set(value) { - shape.fillColor = ColorStateList.valueOf(value) - field = value - } - - var shapeStrokeColor: Int = Color.DKGRAY - set(value) { - shape.strokeColor = ColorStateList.valueOf(value) - field = value - } - - var shapeLetter: String = context.getString(R.string.shape_appearance_small_label) - set(value) { - shapePreviewView.text = value - field = value - } - - init { - val view = View.inflate(context, R.layout.shape_attribute_view_layout, this) - shapeAttributeTextView = view.findViewById(R.id.shape_attribute) - shapePreviewView = view.findViewById(R.id.shape_preview) - - val a = context.theme.obtainStyledAttributes( - attrs, - R.styleable.ShapeAttributeView, - defStyleAttr, - defStyleRes - ) - shapeAttrText = a.getString( - R.styleable.ShapeAttributeView_android_text - ) ?: shapeAttrText - - shapeFillColor = a.getColor( - R.styleable.ShapeAttributeView_shapeFillColor, - Color.LTGRAY - ) - shapeStrokeColor = a.getColor( - R.styleable.ShapeAttributeView_shapeStrokeColor, - Color.DKGRAY - ) - shapeAppearanceRes = a.getInt( - R.styleable.ShapeAttributeView_shapeAppearanceAttr, - R.attr.shapeAppearanceSmallComponent - ) - - shapeLetter = a.getString( - R.styleable.ShapeAttributeView_shapeSizeLetter - ) ?: shapeLetter - - a.recycle() - } - - private fun getShapeAppearanceDefaultRes(shapeAppearanceRes: Int) = when (shapeAppearanceRes) { - R.attr.shapeAppearanceMediumComponent -> R.style.Widget_MaterialComponents_CardView - R.attr.shapeAppearanceLargeComponent -> R.style.Widget_MaterialComponents_NavigationView - else -> R.style.Widget_MaterialComponents_Button - } - - companion object { - private const val DEFAULT_SHAPE_STROKE_WIDTH = 2F - } -} diff --git a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/TypeAttributeView.kt b/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/TypeAttributeView.kt deleted file mode 100644 index d38624d1..00000000 --- a/MaterialThemeBuilder/app/src/main/java/io/material/materialthemebuilder/widget/TypeAttributeView.kt +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2019 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 io.material.materialthemebuilder.widget - -import android.content.Context -import android.content.res.ColorStateList -import android.util.AttributeSet -import android.view.View -import androidx.appcompat.widget.AppCompatTextView -import android.widget.LinearLayout -import androidx.appcompat.content.res.AppCompatResources -import io.material.materialthemebuilder.R - -/** - * A composite view to display a text label and a preview of a TextAppearance theme attribute. - */ -class TypeAttributeView @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null, - defStyleAttr: Int = 0, - defStyleRes: Int = 0 -) : LinearLayout(context, attrs, defStyleAttr, defStyleRes) { - - private val typeAttributeTextView: AppCompatTextView - private val typeAttributePreviewTextView: AppCompatTextView - - private var typeAttrText: String = "?textAppearanceHeadline1" - set(value) { - typeAttributeTextView.text = value - field = value - } - - var typeAttrPreviewText: String = context.getString(R.string.text_appearance_h1_label) - set(value) { - typeAttributePreviewTextView.text = value - field = value - } - - private var typeAttrPreviewTextAppearance: Int = R.attr.textAppearanceHeadline1 - set(value) { - typeAttributePreviewTextView.setTextAppearance(value) - field = value - } - - private var typeAttrPreviewTextColor: ColorStateList = AppCompatResources.getColorStateList( - context, - R.color.material_on_background_emphasis_high_type - ) - set(value) { - typeAttributePreviewTextView.setTextColor(value) - field = value - } - - init { - orientation = HORIZONTAL - val view = View.inflate(context, R.layout.type_attribute_view_layout, this) - typeAttributeTextView = view.findViewById(R.id.type_attribute) - typeAttributePreviewTextView = view.findViewById(R.id.type_attribute_preview) - - val a = context.theme.obtainStyledAttributes( - attrs, - R.styleable.TypeAttributeView, - defStyleAttr, - defStyleRes - ) - typeAttrText = a.getString(R.styleable.TypeAttributeView_android_text) ?: typeAttrText - typeAttrPreviewText = a.getString( - R.styleable.TypeAttributeView_previewText - ) ?: typeAttrPreviewText - typeAttrPreviewTextAppearance = a.getResourceId( - R.styleable.TypeAttributeView_previewTextAppearance, - typeAttrPreviewTextAppearance - ) - typeAttrPreviewTextColor = a.getColorStateList( - R.styleable.TypeAttributeView_previewTextColor - ) ?: typeAttrPreviewTextColor - a.recycle() - } -} diff --git a/MaterialThemeBuilder/app/src/main/res/anim/bottom_sheet_slide_in.xml b/MaterialThemeBuilder/app/src/main/res/anim/bottom_sheet_slide_in.xml deleted file mode 100644 index 75b48919..00000000 --- a/MaterialThemeBuilder/app/src/main/res/anim/bottom_sheet_slide_in.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/anim/bottom_sheet_slide_out.xml b/MaterialThemeBuilder/app/src/main/res/anim/bottom_sheet_slide_out.xml deleted file mode 100644 index 465f9730..00000000 --- a/MaterialThemeBuilder/app/src/main/res/anim/bottom_sheet_slide_out.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/MaterialThemeBuilder/app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 5b233b28..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_add_on_secondary_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_add_on_secondary_24dp.xml deleted file mode 100644 index c8be1fea..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_add_on_secondary_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_bookmark_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_bookmark_24dp.xml deleted file mode 100644 index 6f6aa581..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_bookmark_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_bookmark_control_normal_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_bookmark_control_normal_24dp.xml deleted file mode 100644 index 12f086cc..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_bookmark_control_normal_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_bookmark_on_surface_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_bookmark_on_surface_24dp.xml deleted file mode 100644 index 3bd1535d..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_bookmark_on_surface_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_colorize_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_colorize_24dp.xml deleted file mode 100644 index f53a0e24..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_colorize_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_favorite_on_surface_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_favorite_on_surface_24dp.xml deleted file mode 100644 index a1b80340..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_favorite_on_surface_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_format_size_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_format_size_24dp.xml deleted file mode 100644 index 44595ade..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_format_size_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_inbox_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_inbox_24dp.xml deleted file mode 100644 index 111e2414..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_inbox_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_launcher_background.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index c0ec19f5..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_material_icon_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_material_icon_24dp.xml deleted file mode 100644 index cfe21c59..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_material_icon_24dp.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_menu_control_normal_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_menu_control_normal_24dp.xml deleted file mode 100644 index 3ba200ee..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_menu_control_normal_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_menu_on_surface_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_menu_on_surface_24dp.xml deleted file mode 100644 index ad77a374..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_menu_on_surface_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_more_vert_on_surface_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_more_vert_on_surface_24dp.xml deleted file mode 100644 index c7c6b366..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_more_vert_on_surface_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_music_note_on_surface_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_music_note_on_surface_24dp.xml deleted file mode 100644 index 444f58f2..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_music_note_on_surface_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_news_on_surface_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_news_on_surface_24dp.xml deleted file mode 100644 index 52d8ad34..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_news_on_surface_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_open_in_new_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_open_in_new_24dp.xml deleted file mode 100644 index 3d043075..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_open_in_new_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_place_on_surface_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_place_on_surface_24dp.xml deleted file mode 100644 index 246e74dd..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_place_on_surface_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_rounded_corner_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_rounded_corner_24dp.xml deleted file mode 100644 index e1966d42..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_rounded_corner_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_search_control_normal_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_search_control_normal_24dp.xml deleted file mode 100644 index 56a6e274..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_search_control_normal_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_search_on_surface_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_search_on_surface_24dp.xml deleted file mode 100644 index a73e0e9d..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_search_on_surface_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_send_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_send_24dp.xml deleted file mode 100644 index 328f1cc9..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_send_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_share_control_normal_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_share_control_normal_24dp.xml deleted file mode 100644 index f883971e..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_share_control_normal_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_share_on_surface_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_share_on_surface_24dp.xml deleted file mode 100644 index 1f637976..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_share_on_surface_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/ic_star_24dp.xml b/MaterialThemeBuilder/app/src/main/res/drawable/ic_star_24dp.xml deleted file mode 100644 index dd0ec02a..00000000 --- a/MaterialThemeBuilder/app/src/main/res/drawable/ic_star_24dp.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/drawable/sample_image.png b/MaterialThemeBuilder/app/src/main/res/drawable/sample_image.png deleted file mode 100644 index 8648f2744375f5207be767b1629ce2e75570e991..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4780 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 UtUZQJ{~m{}6~XfHapIN#0Px# diff --git a/MaterialThemeBuilder/app/src/main/res/font/roboto_black_italic.xml b/MaterialThemeBuilder/app/src/main/res/font/roboto_black_italic.xml deleted file mode 100644 index afaa1a9e..00000000 --- a/MaterialThemeBuilder/app/src/main/res/font/roboto_black_italic.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/layout/activity_main.xml b/MaterialThemeBuilder/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index 87cf9a2e..00000000 --- a/MaterialThemeBuilder/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/layout/color_attribute_view_layout.xml b/MaterialThemeBuilder/app/src/main/res/layout/color_attribute_view_layout.xml deleted file mode 100644 index b1a39712..00000000 --- a/MaterialThemeBuilder/app/src/main/res/layout/color_attribute_view_layout.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/layout/component_bottom_app_bar.xml b/MaterialThemeBuilder/app/src/main/res/layout/component_bottom_app_bar.xml deleted file mode 100644 index 7a319c10..00000000 --- a/MaterialThemeBuilder/app/src/main/res/layout/component_bottom_app_bar.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/layout/component_bottom_navigation.xml b/MaterialThemeBuilder/app/src/main/res/layout/component_bottom_navigation.xml deleted file mode 100644 index 2fc9f475..00000000 --- a/MaterialThemeBuilder/app/src/main/res/layout/component_bottom_navigation.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - diff --git a/MaterialThemeBuilder/app/src/main/res/layout/component_bottom_sheet.xml b/MaterialThemeBuilder/app/src/main/res/layout/component_bottom_sheet.xml deleted file mode 100644 index 680ceb80..00000000 --- a/MaterialThemeBuilder/app/src/main/res/layout/component_bottom_sheet.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - -