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