diff --git a/README.md b/README.md index 8a18daf..5639a22 100644 --- a/README.md +++ b/README.md @@ -43,10 +43,10 @@ See https://github.com/googlesamples/android-ConstraintLayoutExamples * [x] Chain Style * [x] Weighted chains * [ ] Margins and chains _(Added in 1.1)_ -- [ ] Virtual Helpers objects +- [x] Virtual Helpers objects 🥇 * [x] Guideline - * [ ] Barrier - * [ ] Group + * [x] Barrier + * [x] Group - [ ] Optimizer _(Added in 1.1)_ ## Objective diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ab10cfb..db74da2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -31,6 +31,9 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/hossainkhan/android/demo/browse/LayoutBrowseActivity.kt b/app/src/main/java/com/hossainkhan/android/demo/browse/LayoutBrowseActivity.kt index 4dd9436..a199995 100644 --- a/app/src/main/java/com/hossainkhan/android/demo/browse/LayoutBrowseActivity.kt +++ b/app/src/main/java/com/hossainkhan/android/demo/browse/LayoutBrowseActivity.kt @@ -16,14 +16,15 @@ package com.hossainkhan.android.demo.browse -import androidx.lifecycle.ViewModelProviders import android.os.Bundle import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.hossainkhan.android.demo.R import com.hossainkhan.android.demo.layoutpreview.LayoutChainStyleActivity import com.hossainkhan.android.demo.layoutpreview.LayoutGuidelineBarrierActivity +import com.hossainkhan.android.demo.layoutpreview.LayoutGuidelineGroupActivity import com.hossainkhan.android.demo.layoutpreview.LayoutPreviewBaseActivity import com.hossainkhan.android.demo.layoutpreview.LayoutVisibilityGoneActivity import com.hossainkhan.android.demo.viewmodel.LayoutPreviewViewModelFactory @@ -78,6 +79,9 @@ class LayoutBrowseActivity : AppCompatActivity() { private fun onLayoutItemSelected(layoutResId: Int) { Timber.i("Selected layout id: %s", layoutResId) + /* + * Where applicable, loads specific activity with interactive feature for user to try out feature. + */ when (layoutResId) { R.layout.preview_visibility_gone -> { startActivity(LayoutPreviewBaseActivity.createStartIntent(this, @@ -91,7 +95,12 @@ class LayoutBrowseActivity : AppCompatActivity() { startActivity(LayoutPreviewBaseActivity.createStartIntent(this, LayoutGuidelineBarrierActivity::class.java, R.layout.preview_virtual_helper_barrier)) } + R.layout.preview_virtual_helper_group -> { + startActivity(LayoutPreviewBaseActivity.createStartIntent(this, + LayoutGuidelineGroupActivity::class.java, R.layout.preview_virtual_helper_group)) + } else -> { + // By default it loads the preview activity with the layout requested. startActivity(LayoutPreviewBaseActivity.createStartIntent(this, layoutResId)) } } diff --git a/app/src/main/java/com/hossainkhan/android/demo/dagger/ActivityBindingModule.kt b/app/src/main/java/com/hossainkhan/android/demo/dagger/ActivityBindingModule.kt index dea9c6a..276e543 100644 --- a/app/src/main/java/com/hossainkhan/android/demo/dagger/ActivityBindingModule.kt +++ b/app/src/main/java/com/hossainkhan/android/demo/dagger/ActivityBindingModule.kt @@ -18,6 +18,7 @@ package com.hossainkhan.android.demo.dagger import com.hossainkhan.android.demo.layoutpreview.LayoutChainStyleActivity import com.hossainkhan.android.demo.layoutpreview.LayoutGuidelineBarrierActivity +import com.hossainkhan.android.demo.layoutpreview.LayoutGuidelineGroupActivity import com.hossainkhan.android.demo.layoutpreview.LayoutPreviewBaseActivity import com.hossainkhan.android.demo.layoutpreview.LayoutVisibilityGoneActivity import dagger.Module @@ -62,4 +63,8 @@ abstract class ActivityBindingModule { @ActivityScope @ContributesAndroidInjector abstract fun layoutGuidelineBarrierActivity(): LayoutGuidelineBarrierActivity + + @ActivityScope + @ContributesAndroidInjector + abstract fun layoutGuidelineGroupActivity(): LayoutGuidelineGroupActivity } \ No newline at end of file diff --git a/app/src/main/java/com/hossainkhan/android/demo/data/LayoutDataStore.kt b/app/src/main/java/com/hossainkhan/android/demo/data/LayoutDataStore.kt index 16528f1..0d6a2b3 100644 --- a/app/src/main/java/com/hossainkhan/android/demo/data/LayoutDataStore.kt +++ b/app/src/main/java/com/hossainkhan/android/demo/data/LayoutDataStore.kt @@ -135,7 +135,18 @@ class LayoutDataStore @Inject constructor( thumbnailResourceId = R.drawable.thumb_virtual_helper_barrier, title = "Virtual Helper: Barrier", description = "A Barrier references multiple widgets as input, and creates a virtual guideline " + - "based on the most extreme widget on the specified side.") + "based on the most extreme widget on the specified side."), + + /* + * https://developer.android.com/reference/android/support/constraint/Group.html + */ + LayoutInformation( + layoutResourceId = R.layout.preview_virtual_helper_group, + thumbnailResourceId = R.drawable.thumb_virtual_helper_group, + title = "Virtual Helper: Group", + description = "This class controls the visibility of a set of referenced widgets. " + + "Widgets are referenced by being added to a comma separated list of ids.\n\n" + + "For example you can link multiple views: `app:constraint_referenced_ids=\"viewId1,viewId2,viewId3\"` and control their visibility at once.") /* diff --git a/app/src/main/java/com/hossainkhan/android/demo/layoutpreview/LayoutGuidelineGroupActivity.kt b/app/src/main/java/com/hossainkhan/android/demo/layoutpreview/LayoutGuidelineGroupActivity.kt new file mode 100644 index 0000000..ec05c81 --- /dev/null +++ b/app/src/main/java/com/hossainkhan/android/demo/layoutpreview/LayoutGuidelineGroupActivity.kt @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2019 Hossain Khan + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hossainkhan.android.demo.layoutpreview + +import android.os.Bundle +import android.view.View +import android.widget.Button +import androidx.constraintlayout.widget.Group +import com.hossainkhan.android.demo.R + +/** + * Activity showcasing how virtual guideline group containing multiple views and how it can be changed. + * + * See https://developer.android.com/reference/android/support/constraint/Barrier + */ +class LayoutGuidelineGroupActivity : LayoutPreviewBaseActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + // Setup additional view that is only available in this screen. + val toggleButton = findViewById