Skip to content
This repository was archived by the owner on Aug 22, 2024. It is now read-only.

Commit 20b9209

Browse files
authored
Merge pull request #75 from amardeshbd/50-virtual-guideline-barrier
Added virtual guideline barrier
2 parents 8d1a004 + 391adec commit 20b9209

File tree

12 files changed

+327
-41
lines changed

12 files changed

+327
-41
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools"
34
package="com.hossainkhan.android.demo">
45

56
<application
@@ -9,7 +10,8 @@
910
android:label="@string/app_name"
1011
android:roundIcon="@mipmap/ic_launcher_round"
1112
android:supportsRtl="true"
12-
android:theme="@style/AppTheme">
13+
android:theme="@style/AppTheme"
14+
tools:ignore="AllowBackup,GoogleAppIndexingWarning">
1315
<activity android:name=".browse.LayoutBrowseActivity">
1416
<intent-filter>
1517
<action android:name="android.intent.action.MAIN" />
@@ -26,6 +28,9 @@
2628
<activity
2729
android:name=".layoutpreview.LayoutChainStyleActivity"
2830
android:parentActivityName=".browse.LayoutBrowseActivity" />
31+
<activity
32+
android:name=".layoutpreview.LayoutGuidelineBarrierActivity"
33+
android:parentActivityName=".browse.LayoutBrowseActivity" />
2934
</application>
3035

3136
</manifest>

app/src/main/java/com/hossainkhan/android/demo/browse/LayoutBrowseActivity.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import androidx.recyclerview.widget.GridLayoutManager
2323
import androidx.recyclerview.widget.RecyclerView
2424
import com.hossainkhan.android.demo.R
2525
import com.hossainkhan.android.demo.layoutpreview.LayoutChainStyleActivity
26+
import com.hossainkhan.android.demo.layoutpreview.LayoutGuidelineBarrierActivity
2627
import com.hossainkhan.android.demo.layoutpreview.LayoutPreviewBaseActivity
2728
import com.hossainkhan.android.demo.layoutpreview.LayoutVisibilityGoneActivity
2829
import com.hossainkhan.android.demo.viewmodel.LayoutPreviewViewModelFactory
@@ -79,10 +80,16 @@ class LayoutBrowseActivity : AppCompatActivity() {
7980

8081
when (layoutResId) {
8182
R.layout.preview_visibility_gone -> {
82-
startActivity(LayoutVisibilityGoneActivity.createStartIntent(this))
83+
startActivity(LayoutPreviewBaseActivity.createStartIntent(this,
84+
LayoutVisibilityGoneActivity::class.java, R.layout.preview_visibility_gone))
8385
}
8486
R.layout.preview_chain_style_main -> {
85-
startActivity(LayoutChainStyleActivity.createStartIntent(this))
87+
startActivity(LayoutPreviewBaseActivity.createStartIntent(this,
88+
LayoutChainStyleActivity::class.java, R.layout.preview_chain_style_main))
89+
}
90+
R.layout.preview_virtual_helper_barrier -> {
91+
startActivity(LayoutPreviewBaseActivity.createStartIntent(this,
92+
LayoutGuidelineBarrierActivity::class.java, R.layout.preview_virtual_helper_barrier))
8693
}
8794
else -> {
8895
startActivity(LayoutPreviewBaseActivity.createStartIntent(this, layoutResId))

app/src/main/java/com/hossainkhan/android/demo/dagger/ActivityBindingModule.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.hossainkhan.android.demo.dagger
1818

1919
import com.hossainkhan.android.demo.layoutpreview.LayoutChainStyleActivity
20+
import com.hossainkhan.android.demo.layoutpreview.LayoutGuidelineBarrierActivity
2021
import com.hossainkhan.android.demo.layoutpreview.LayoutPreviewBaseActivity
2122
import com.hossainkhan.android.demo.layoutpreview.LayoutVisibilityGoneActivity
2223
import dagger.Module
@@ -57,4 +58,8 @@ abstract class ActivityBindingModule {
5758
@ActivityScope
5859
@ContributesAndroidInjector
5960
abstract fun layoutChainActivity(): LayoutChainStyleActivity
61+
62+
@ActivityScope
63+
@ContributesAndroidInjector
64+
abstract fun layoutGuidelineBarrierActivity(): LayoutGuidelineBarrierActivity
6065
}

app/src/main/java/com/hossainkhan/android/demo/data/LayoutDataStore.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,18 @@ class LayoutDataStore @Inject constructor(
124124
title = "Virtual Helper: Guideline",
125125
description = "The Guideline object allows you to create Horizontal and Vertical guidelines which " +
126126
"are positioned relative to the ConstraintLayout container." +
127-
"Widgets can then be positioned by constraining them to such guidelines. ")
127+
"Widgets can then be positioned by constraining them to such guidelines. "),
128+
129+
/*
130+
* https://developer.android.com/training/constraint-layout/index.html#constrain-to-a-barrier
131+
* https://constraintlayout.com/basics/barriers.html
132+
*/
133+
LayoutInformation(
134+
layoutResourceId = R.layout.preview_virtual_helper_barrier,
135+
thumbnailResourceId = R.drawable.thumb_virtual_helper_barrier,
136+
title = "Virtual Helper: Barrier",
137+
description = "A Barrier references multiple widgets as input, and creates a virtual guideline " +
138+
"based on the most extreme widget on the specified side.")
128139

129140

130141
/*

app/src/main/java/com/hossainkhan/android/demo/layoutpreview/LayoutChainStyleActivity.kt

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,16 @@
1616

1717
package com.hossainkhan.android.demo.layoutpreview
1818

19-
import android.content.Context
20-
import android.content.Intent
2119
import android.os.Bundle
20+
import android.view.View
21+
import android.widget.RadioButton
22+
import android.widget.TextView
2223
import androidx.annotation.StringRes
2324
import androidx.constraintlayout.widget.ConstraintLayout
2425
import androidx.constraintlayout.widget.ConstraintSet
25-
import androidx.constraintlayout.widget.ConstraintSet.CHAIN_PACKED
26-
import androidx.constraintlayout.widget.ConstraintSet.CHAIN_SPREAD
27-
import androidx.constraintlayout.widget.ConstraintSet.CHAIN_SPREAD_INSIDE
26+
import androidx.constraintlayout.widget.ConstraintSet.*
2827
import androidx.transition.TransitionManager
29-
import android.view.View
3028
import com.hossainkhan.android.demo.R
31-
import android.widget.RadioButton
32-
import android.widget.TextView
3329
import timber.log.Timber
3430

3531
/**
@@ -39,19 +35,6 @@ import timber.log.Timber
3935
*/
4036
class LayoutChainStyleActivity : LayoutPreviewBaseActivity() {
4137

42-
companion object {
43-
/**
44-
* Creates an intent with required information to start this activity.
45-
*
46-
* @param context Activity context.
47-
*/
48-
fun createStartIntent(context: Context): Intent {
49-
val intent = Intent(context, LayoutChainStyleActivity::class.java)
50-
intent.putExtra(BUNDLE_KEY_LAYOUT_RESID, R.layout.preview_chain_style_main)
51-
return intent
52-
}
53-
}
54-
5538
private lateinit var constraintLayout: ConstraintLayout
5639
private lateinit var guideTextView: TextView
5740
/**
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Copyright (c) 2019 Hossain Khan
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.hossainkhan.android.demo.layoutpreview
18+
19+
import android.os.Bundle
20+
import android.widget.Button
21+
import android.widget.TextView
22+
import com.hossainkhan.android.demo.R
23+
24+
/**
25+
* Activity showcasing how virtual guideline barrier changes when a view length changes within the barrier.
26+
*
27+
* See https://developer.android.com/reference/android/support/constraint/Barrier
28+
*/
29+
class LayoutGuidelineBarrierActivity : LayoutPreviewBaseActivity() {
30+
31+
override fun onCreate(savedInstanceState: Bundle?) {
32+
super.onCreate(savedInstanceState)
33+
34+
// Setup additional view that is only available in this screen.
35+
val toggleButton = findViewById<Button>(R.id.toggle_label_text_size)
36+
val textLabel = findViewById<TextView>(R.id.text_label)
37+
38+
toggleButton.setOnClickListener {
39+
if (textLabel.text == getString(R.string.barrier_label_text_small)) {
40+
textLabel.setText(R.string.barrier_label_text_long)
41+
} else {
42+
textLabel.setText(R.string.barrier_label_text_small)
43+
}
44+
}
45+
}
46+
}

app/src/main/java/com/hossainkhan/android/demo/layoutpreview/LayoutPreviewBaseActivity.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,19 @@ open class LayoutPreviewBaseActivity : AppCompatActivity() {
6161
intent.putExtra(BUNDLE_KEY_LAYOUT_RESID, layoutResourceId)
6262
return intent
6363
}
64+
65+
/**
66+
* Creates an intent with required information to start child activity with specific interactive demo.
67+
*
68+
* @param context Activity context.
69+
* @param clazz Activity class that has interactive demo.
70+
* @param layoutResourceId The layout resource ID to load into the view.
71+
*/
72+
fun <T> createStartIntent(context: Context, clazz: Class<T>, @LayoutRes layoutResourceId: Int): Intent {
73+
val intent = Intent(context, clazz)
74+
intent.putExtra(BUNDLE_KEY_LAYOUT_RESID, layoutResourceId)
75+
return intent
76+
}
6477
}
6578

6679
@Inject

app/src/main/java/com/hossainkhan/android/demo/layoutpreview/LayoutVisibilityGoneActivity.kt

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,17 @@
1616

1717
package com.hossainkhan.android.demo.layoutpreview
1818

19-
import android.content.Context
20-
import android.content.Intent
2119
import android.os.Bundle
2220
import android.view.View
2321
import android.widget.Button
2422
import com.hossainkhan.android.demo.R
2523

24+
/**
25+
* Activity showcasing how visibility GONE affects constraints.
26+
*
27+
* See https://developer.android.com/reference/android/support/constraint/ConstraintLayout#VisibilityBehavior
28+
*/
2629
class LayoutVisibilityGoneActivity : LayoutPreviewBaseActivity() {
27-
28-
companion object {
29-
/**
30-
* Creates an intent with required information to start this activity.
31-
*
32-
* @param context Activity context.
33-
*/
34-
fun createStartIntent(context: Context): Intent {
35-
val intent = Intent(context, LayoutVisibilityGoneActivity::class.java)
36-
intent.putExtra(BUNDLE_KEY_LAYOUT_RESID, R.layout.preview_visibility_gone)
37-
return intent
38-
}
39-
}
40-
4130
override fun onCreate(savedInstanceState: Bundle?) {
4231
super.onCreate(savedInstanceState)
4332

0 commit comments

Comments
 (0)