From a25215380aaee3e9d080fdacd7e9998acce44df1 Mon Sep 17 00:00:00 2001 From: AlbertoYabeda Date: Sun, 23 Oct 2022 15:37:53 +0200 Subject: [PATCH 01/18] (Analytics) implementing ViewPager2 --- analytics/.gitignore | 2 +- .../analytics/java/MainActivity.java | 76 +++++++++++-------- .../analytics/kotlin/MainActivity.kt | 72 ++++++++++-------- .../app/src/main/res/layout/activity_main.xml | 13 +++- analytics/build.gradle | 2 +- 5 files changed, 97 insertions(+), 68 deletions(-) diff --git a/analytics/.gitignore b/analytics/.gitignore index d46cccfd2b..7808d9c572 100644 --- a/analytics/.gitignore +++ b/analytics/.gitignore @@ -2,7 +2,7 @@ /local.properties .DS_Store build/ -google-services.json +app/google-services.json # Android Studio .idea diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java index 6b8bceb5bf..0692053dba 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java @@ -28,15 +28,21 @@ import android.util.Log; import android.view.Menu; import android.view.MenuItem; +import android.widget.ImageView; +import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; +import androidx.fragment.app.FragmentActivity; + import androidx.preference.PreferenceManager; import androidx.viewpager.widget.ViewPager; +import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.viewpager2.widget.ViewPager2; +import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; import com.google.firebase.analytics.FirebaseAnalytics; import com.google.firebase.quickstart.analytics.R; import com.google.firebase.quickstart.analytics.databinding.ActivityMainBinding; @@ -52,6 +58,7 @@ public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private static final String KEY_FAVORITE_FOOD = "favorite_food"; + private static final ImageInfo[] IMAGE_INFOS = { new ImageInfo(R.drawable.favorite, R.string.pattern1_title, R.string.pattern1_id), new ImageInfo(R.drawable.flash, R.string.pattern2_title, R.string.pattern2_id), @@ -63,14 +70,14 @@ public class MainActivity extends AppCompatActivity { /** * The {@link androidx.viewpager.widget.PagerAdapter} that will provide fragments for each image. - * This uses a {@link FragmentPagerAdapter}, which keeps every loaded fragment in memory. + * This uses a {@link FragmentStateAdapter}, which keeps every loaded fragment in memory. */ private ImagePagerAdapter mImagePagerAdapter; /** * The {@link ViewPager} that will host the patterns. */ - private ViewPager mViewPager; + private ViewPager2 mViewPager; /** * The {@code FirebaseAnalytics} used to record screen views. @@ -84,6 +91,7 @@ public class MainActivity extends AppCompatActivity { */ private String mFavoriteFood; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -106,26 +114,38 @@ protected void onCreate(Bundle savedInstanceState) { // Create the adapter that will return a fragment for each image. - mImagePagerAdapter = new ImagePagerAdapter(getSupportFragmentManager(), IMAGE_INFOS); + mImagePagerAdapter = new ImagePagerAdapter(this, IMAGE_INFOS); // Set up the ViewPager with the pattern adapter. - mViewPager = binding.viewPager; + mViewPager = (ViewPager2)findViewById(R.id.pager); mViewPager.setAdapter(mImagePagerAdapter); + mViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL); - // Workaround for AppCompat issue not showing ViewPager titles - ViewPager.LayoutParams params = (ViewPager.LayoutParams) - binding.pagerTabStrip.getLayoutParams(); - params.isDecor = true; + ImageView imageView = findViewById(R.id.imageView); - // When the visible image changes, send a screen view hit. - mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { + mViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override - public void onPageSelected(int position) { + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + super.onPageScrolled(position, positionOffset, positionOffsetPixels); recordImageView(); recordScreenView(); } }); + TabLayout tabLayout = findViewById(R.id.tab_layout); + + // Workaround for AppCompat issue not showing ViewPager titles +// ViewPager.LayoutParams params = (ViewPager.LayoutParams) +// binding.pagerTabStrip.getLayoutParams(); +// params.isDecor = true; + + // When the visible image changes, send a screen view hit. + new TabLayoutMediator(tabLayout, mViewPager, new TabLayoutMediator.TabConfigurationStrategy() { + public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) { + tab.setText(IMAGE_INFOS[position].title); + } + }).attach(); + // Send initial screen screen view hit. recordImageView(); } @@ -228,14 +248,14 @@ private String getCurrentImageTitle() { * @return id of image */ private String getCurrentImageId() { - int position = mViewPager.getCurrentItem(); + int position = 0; ImageInfo info = IMAGE_INFOS[position]; return getString(info.id); } /** * Record a screen view for the visible {@link ImageFragment} displayed - * inside {@link FragmentPagerAdapter}. + * inside {@link FragmentStateAdapter}. */ private void recordImageView() { String id = getCurrentImageId(); @@ -267,38 +287,30 @@ private void recordScreenView() { } /** - * A {@link FragmentPagerAdapter} that returns a fragment corresponding to + * A {@link FragmentStateAdapter} that returns a fragment corresponding to * one of the sections/tabs/pages. */ - public class ImagePagerAdapter extends FragmentPagerAdapter { + public class ImagePagerAdapter extends FragmentStateAdapter { private final ImageInfo[] infos; @SuppressLint("WrongConstant") - public ImagePagerAdapter(FragmentManager fm, ImageInfo[] infos) { - super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); + public ImagePagerAdapter(FragmentActivity fm, ImageInfo[] infos) { + super(fm); this.infos = infos; } + + @NonNull @Override - public Fragment getItem(int position) { + public Fragment createFragment(int position) { ImageInfo info = infos[position]; - return ImageFragment.newInstance(info.image); + return ImageFragment.newInstance(info.id); } @Override - public int getCount() { + public int getItemCount() { return infos.length; } - - @Override - public CharSequence getPageTitle(int position) { - if (position < 0 || position >= infos.length) { - return null; - } - Locale l = Locale.getDefault(); - ImageInfo info = infos[position]; - return getString(info.title).toUpperCase(l); - } } } diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt index f2c4dc4fd9..fd66d58f98 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt @@ -9,17 +9,21 @@ import android.view.MenuItem import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentManager -import androidx.fragment.app.FragmentPagerAdapter +import androidx.fragment.app.FragmentActivity import androidx.preference.PreferenceManager -import androidx.viewpager.widget.ViewPager +import androidx.viewpager2.adapter.FragmentStateAdapter +import androidx.viewpager2.widget.ViewPager2 +import com.google.android.material.tabs.TabLayout +import com.google.android.material.tabs.TabLayoutMediator import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.analytics.ktx.analytics import com.google.firebase.analytics.ktx.logEvent import com.google.firebase.ktx.Firebase import com.google.firebase.quickstart.analytics.R import com.google.firebase.quickstart.analytics.databinding.ActivityMainBinding -import java.util.Locale +import com.google.firebase.quickstart.analytics.java.MainActivity +import com.google.firebase.quickstart.analytics.kotlin.MainActivity.Companion.IMAGE_INFOS +import java.util.* /** * Activity which displays numerous background images that may be viewed. These background images @@ -42,7 +46,7 @@ class MainActivity : AppCompatActivity() { /** * The [androidx.viewpager.widget.PagerAdapter] that will provide fragments for each image. - * This uses a [FragmentPagerAdapter], which keeps every loaded fragment in memory. + * This uses a [FragmentStateAdapter], which keeps every loaded fragment in memory. */ private lateinit var imagePagerAdapter: ImagePagerAdapter @@ -73,22 +77,28 @@ class MainActivity : AppCompatActivity() { } // Create the adapter that will return a fragment for each image. - imagePagerAdapter = ImagePagerAdapter(supportFragmentManager, IMAGE_INFOS) + imagePagerAdapter = ImagePagerAdapter(this, IMAGE_INFOS) // Set up the ViewPager with the pattern adapter. - binding.viewPager.adapter = imagePagerAdapter + //binding.viewPager.adapter = imagePagerAdapter + val viewPager: ViewPager2 = findViewById(R.id.pager) // Workaround for AppCompat issue not showing ViewPager titles - val params = binding.pagerTabStrip.layoutParams as ViewPager.LayoutParams - params.isDecor = true +// val params = binding.pagerTabStrip.layoutParams as ViewPager.LayoutParams +// params.isDecor = true // When the visible image changes, send a screen view hit. - binding.viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() { - override fun onPageSelected(position: Int) { - recordImageView() - recordScreenView() - } - }) +// binding.viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() { +// override fun onPageSelected(position: Int) { +// recordImageView() +// recordScreenView() +// } +// }) + + val tabLayout: TabLayout = findViewById(R.id.tab_layout) + TabLayoutMediator(tabLayout, viewPager) { tab, position -> + tab.text = "${IMAGE_INFOS[position]}" + }.attach() // Send initial screen screen view hit. recordImageView() @@ -174,7 +184,7 @@ class MainActivity : AppCompatActivity() { * @return title of image */ private fun getCurrentImageTitle(): String { - val position = binding.viewPager.currentItem + val position = 0//binding.viewPager.currentItem val info = IMAGE_INFOS[position] return getString(info.title) } @@ -185,14 +195,14 @@ class MainActivity : AppCompatActivity() { * @return id of image */ private fun getCurrentImageId(): String { - val position = binding.viewPager.currentItem + val position = 0//binding.viewPager.currentItem val info = IMAGE_INFOS[position] return getString(info.id) } /** * Record a screen view for the visible [ImageFragment] displayed - * inside [FragmentPagerAdapter]. + * inside [FragmentStateAdapter]. */ private fun recordImageView() { val id = getCurrentImageId() @@ -224,29 +234,31 @@ class MainActivity : AppCompatActivity() { } /** - * A [FragmentPagerAdapter] that returns a fragment corresponding to + * A [FragmentStateAdapter] that returns a fragment corresponding to * one of the sections/tabs/pages. */ @SuppressLint("WrongConstant") inner class ImagePagerAdapter( - fm: FragmentManager, + fm: FragmentActivity, private val infos: Array - ) : FragmentPagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { - - override fun getItem(position: Int): Fragment { - val info = infos[position] - return ImageFragment.newInstance(info.image) - } - - override fun getCount() = infos.size + ) : FragmentStateAdapter(fm) { - override fun getPageTitle(position: Int): CharSequence? { + fun getPageTitle(position: Int): CharSequence? { if (position < 0 || position >= infos.size) { return null } val l = Locale.getDefault() val info = infos[position] - return getString(info.title).toUpperCase(l) + return getString(info.title).uppercase(l) + } + + override fun getItemCount(): Int { + return infos.size + } + + override fun createFragment(position: Int): Fragment { + val info = infos[position] + return ImageFragment.newInstance(info.image) } } } diff --git a/analytics/app/src/main/res/layout/activity_main.xml b/analytics/app/src/main/res/layout/activity_main.xml index 25ad2823e5..187b2e73e5 100644 --- a/analytics/app/src/main/res/layout/activity_main.xml +++ b/analytics/app/src/main/res/layout/activity_main.xml @@ -12,17 +12,22 @@ 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. --> - - + + - + diff --git a/analytics/build.gradle b/analytics/build.gradle index e4ab995585..c089e06722 100644 --- a/analytics/build.gradle +++ b/analytics/build.gradle @@ -7,7 +7,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.3.0' + classpath 'com.android.tools.build:gradle:7.2.0' classpath 'com.google.gms:google-services:4.3.14' classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20' } From 94a01ca79f1738b0463b5b28f5afa0f56de387ff Mon Sep 17 00:00:00 2001 From: AlbertoYabeda Date: Mon, 24 Oct 2022 23:22:31 +0200 Subject: [PATCH 02/18] (quickstart-android [analytics]) - setting new layout widgets --- .../app/src/main/res/layout/activity_main.xml | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/analytics/app/src/main/res/layout/activity_main.xml b/analytics/app/src/main/res/layout/activity_main.xml index 187b2e73e5..881b1c3a23 100644 --- a/analytics/app/src/main/res/layout/activity_main.xml +++ b/analytics/app/src/main/res/layout/activity_main.xml @@ -12,22 +12,31 @@ 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. --> - + android:layout_marginTop="60dp"> + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginBottom="23dp" + app:layout_constraintBottom_toTopOf="@+id/pager" + app:layout_constraintEnd_toEndOf="@id/pager" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0" /> - - + android:layout_height="528dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.496" + tools:ignore="MissingConstraints" /> + From d859f606858396116d52ff0b5ebe35d4290879e6 Mon Sep 17 00:00:00 2001 From: AlbertoYabeda Date: Mon, 24 Oct 2022 23:23:46 +0200 Subject: [PATCH 03/18] (quickstart-android [analytics]) - implem - ViewPager2 java --- .../quickstart/analytics/java/MainActivity.java | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java index 0692053dba..8cf6e5ec33 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java @@ -28,25 +28,20 @@ import android.util.Log; import android.view.Menu; import android.view.MenuItem; -import android.widget.ImageView; - import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; - import androidx.preference.PreferenceManager; import androidx.viewpager.widget.ViewPager; import androidx.viewpager2.adapter.FragmentStateAdapter; import androidx.viewpager2.widget.ViewPager2; - import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayoutMediator; import com.google.firebase.analytics.FirebaseAnalytics; import com.google.firebase.quickstart.analytics.R; import com.google.firebase.quickstart.analytics.databinding.ActivityMainBinding; - import java.util.Locale; /** @@ -112,7 +107,6 @@ protected void onCreate(Bundle savedInstanceState) { setUserFavoriteFood(userFavoriteFood); } - // Create the adapter that will return a fragment for each image. mImagePagerAdapter = new ImagePagerAdapter(this, IMAGE_INFOS); @@ -121,8 +115,6 @@ protected void onCreate(Bundle savedInstanceState) { mViewPager.setAdapter(mImagePagerAdapter); mViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL); - ImageView imageView = findViewById(R.id.imageView); - mViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { @@ -134,11 +126,6 @@ public void onPageScrolled(int position, float positionOffset, int positionOffse TabLayout tabLayout = findViewById(R.id.tab_layout); - // Workaround for AppCompat issue not showing ViewPager titles -// ViewPager.LayoutParams params = (ViewPager.LayoutParams) -// binding.pagerTabStrip.getLayoutParams(); -// params.isDecor = true; - // When the visible image changes, send a screen view hit. new TabLayoutMediator(tabLayout, mViewPager, new TabLayoutMediator.TabConfigurationStrategy() { public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) { @@ -250,7 +237,7 @@ private String getCurrentImageTitle() { private String getCurrentImageId() { int position = 0; ImageInfo info = IMAGE_INFOS[position]; - return getString(info.id); + return getString(info.image); } /** @@ -305,7 +292,7 @@ public ImagePagerAdapter(FragmentActivity fm, ImageInfo[] infos) { @Override public Fragment createFragment(int position) { ImageInfo info = infos[position]; - return ImageFragment.newInstance(info.id); + return ImageFragment.newInstance(info.image); } @Override From 87aef7ac3a380e4f145bb64057e5a8fe91cf1f47 Mon Sep 17 00:00:00 2001 From: AlbertoYabeda Date: Mon, 24 Oct 2022 23:24:04 +0200 Subject: [PATCH 04/18] (quickstart-android [analytics]) - implem - ViewPager2 kotlin --- .../analytics/kotlin/MainActivity.kt | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt index fd66d58f98..476b7b02e1 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt @@ -45,7 +45,7 @@ class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding /** - * The [androidx.viewpager.widget.PagerAdapter] that will provide fragments for each image. + * The [androidx.viewpager2.widget.PagerAdapter] that will provide fragments for each image. * This uses a [FragmentStateAdapter], which keeps every loaded fragment in memory. */ private lateinit var imagePagerAdapter: ImagePagerAdapter @@ -82,23 +82,12 @@ class MainActivity : AppCompatActivity() { // Set up the ViewPager with the pattern adapter. //binding.viewPager.adapter = imagePagerAdapter val viewPager: ViewPager2 = findViewById(R.id.pager) + viewPager.adapter = imagePagerAdapter - // Workaround for AppCompat issue not showing ViewPager titles -// val params = binding.pagerTabStrip.layoutParams as ViewPager.LayoutParams -// params.isDecor = true - - // When the visible image changes, send a screen view hit. -// binding.viewPager.addOnPageChangeListener(object : ViewPager.SimpleOnPageChangeListener() { -// override fun onPageSelected(position: Int) { -// recordImageView() -// recordScreenView() -// } -// }) - - val tabLayout: TabLayout = findViewById(R.id.tab_layout) - TabLayoutMediator(tabLayout, viewPager) { tab, position -> - tab.text = "${IMAGE_INFOS[position]}" - }.attach() + val tabLayout: TabLayout = findViewById(R.id.tab_layout) + TabLayoutMediator(tabLayout, viewPager) { tab, position -> + tab.setText(IMAGE_INFOS[position].title) + }.attach() // Send initial screen screen view hit. recordImageView() From 809fa4a58fc39e6c70c116a51d98a3da93ba69a7 Mon Sep 17 00:00:00 2001 From: AlbertoYabeda Date: Mon, 24 Oct 2022 23:35:56 +0200 Subject: [PATCH 05/18] (quickstart-android [analytics]) - refact - update on ViewPager2 id --- .../firebase/quickstart/analytics/java/MainActivity.java | 2 +- .../firebase/quickstart/analytics/kotlin/MainActivity.kt | 2 +- analytics/app/src/main/res/layout/activity_main.xml | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java index 8cf6e5ec33..a2b6eb4163 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java @@ -111,7 +111,7 @@ protected void onCreate(Bundle savedInstanceState) { mImagePagerAdapter = new ImagePagerAdapter(this, IMAGE_INFOS); // Set up the ViewPager with the pattern adapter. - mViewPager = (ViewPager2)findViewById(R.id.pager); + mViewPager = (ViewPager2)findViewById(R.id.viewPager); mViewPager.setAdapter(mImagePagerAdapter); mViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL); diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt index 476b7b02e1..afc6706216 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt @@ -81,7 +81,7 @@ class MainActivity : AppCompatActivity() { // Set up the ViewPager with the pattern adapter. //binding.viewPager.adapter = imagePagerAdapter - val viewPager: ViewPager2 = findViewById(R.id.pager) + val viewPager: ViewPager2 = findViewById(R.id.viewPager) viewPager.adapter = imagePagerAdapter val tabLayout: TabLayout = findViewById(R.id.tab_layout) diff --git a/analytics/app/src/main/res/layout/activity_main.xml b/analytics/app/src/main/res/layout/activity_main.xml index 881b1c3a23..16f0326fcc 100644 --- a/analytics/app/src/main/res/layout/activity_main.xml +++ b/analytics/app/src/main/res/layout/activity_main.xml @@ -24,14 +24,14 @@ specific language governing permissions and limitations under the License. android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginBottom="23dp" - app:layout_constraintBottom_toTopOf="@+id/pager" - app:layout_constraintEnd_toEndOf="@id/pager" + app:layout_constraintBottom_toTopOf="@+id/viewPager" + app:layout_constraintEnd_toEndOf="@id/viewPager" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.0" /> Date: Tue, 8 Nov 2022 23:41:42 +0200 Subject: [PATCH 06/18] (Analytics) - Tablayout and viewPager attributes fix --- .../app/src/main/res/layout/activity_main.xml | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/analytics/app/src/main/res/layout/activity_main.xml b/analytics/app/src/main/res/layout/activity_main.xml index 16f0326fcc..5fa59da8c1 100644 --- a/analytics/app/src/main/res/layout/activity_main.xml +++ b/analytics/app/src/main/res/layout/activity_main.xml @@ -16,27 +16,21 @@ specific language governing permissions and limitations under the License. xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_marginTop="60dp"> + android:layout_height="match_parent"> + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toBottomOf="@+id/tab_layout" /> From 3bcda7784b16f6550042690d7ac6b9840a348894 Mon Sep 17 00:00:00 2001 From: AlbertoYabeda Date: Tue, 8 Nov 2022 23:44:13 +0200 Subject: [PATCH 07/18] (Analytics) - cede refact. and improvements --- .../quickstart/analytics/java/MainActivity.java | 16 +++++++--------- .../quickstart/analytics/kotlin/MainActivity.kt | 2 +- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java index a2b6eb4163..d4a469418f 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java @@ -33,6 +33,8 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; +import androidx.lifecycle.Lifecycle; import androidx.preference.PreferenceManager; import androidx.viewpager.widget.ViewPager; import androidx.viewpager2.adapter.FragmentStateAdapter; @@ -49,11 +51,9 @@ * are shown via {@link ImageFragment}. */ public class MainActivity extends AppCompatActivity { - private static final String TAG = "MainActivity"; private static final String KEY_FAVORITE_FOOD = "favorite_food"; - private static final ImageInfo[] IMAGE_INFOS = { new ImageInfo(R.drawable.favorite, R.string.pattern1_title, R.string.pattern1_id), new ImageInfo(R.drawable.flash, R.string.pattern2_title, R.string.pattern2_id), @@ -86,7 +86,6 @@ public class MainActivity extends AppCompatActivity { */ private String mFavoriteFood; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -108,12 +107,11 @@ protected void onCreate(Bundle savedInstanceState) { } // Create the adapter that will return a fragment for each image. - mImagePagerAdapter = new ImagePagerAdapter(this, IMAGE_INFOS); + mImagePagerAdapter = new ImagePagerAdapter(getSupportFragmentManager(), IMAGE_INFOS, getLifecycle()); // Set up the ViewPager with the pattern adapter. - mViewPager = (ViewPager2)findViewById(R.id.viewPager); + mViewPager = binding.viewPager; mViewPager.setAdapter(mImagePagerAdapter); - mViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL); mViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override @@ -124,7 +122,7 @@ public void onPageScrolled(int position, float positionOffset, int positionOffse } }); - TabLayout tabLayout = findViewById(R.id.tab_layout); + TabLayout tabLayout = binding.tabLayout; // When the visible image changes, send a screen view hit. new TabLayoutMediator(tabLayout, mViewPager, new TabLayoutMediator.TabConfigurationStrategy() { @@ -282,8 +280,8 @@ public class ImagePagerAdapter extends FragmentStateAdapter { private final ImageInfo[] infos; @SuppressLint("WrongConstant") - public ImagePagerAdapter(FragmentActivity fm, ImageInfo[] infos) { - super(fm); + public ImagePagerAdapter(FragmentManager fm, ImageInfo[] infos, Lifecycle lifecyle) { + super(fm, lifecyle); this.infos = infos; } diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt index afc6706216..63ab5f5abe 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt @@ -173,7 +173,7 @@ class MainActivity : AppCompatActivity() { * @return title of image */ private fun getCurrentImageTitle(): String { - val position = 0//binding.viewPager.currentItem + val position = binding.viewPager.currentItem val info = IMAGE_INFOS[position] return getString(info.title) } From 8b579d1f930d8ce52a894eca5e431b0637b58424 Mon Sep 17 00:00:00 2001 From: AlbertoYabeda Date: Wed, 23 Nov 2022 19:18:41 +0200 Subject: [PATCH 08/18] (firebase-analytics) code refact - removed blank spaces --- analytics/app/src/main/AndroidManifest.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/analytics/app/src/main/AndroidManifest.xml b/analytics/app/src/main/AndroidManifest.xml index ae27d65cf2..f18daad72f 100644 --- a/analytics/app/src/main/AndroidManifest.xml +++ b/analytics/app/src/main/AndroidManifest.xml @@ -1,6 +1,10 @@ + + + + Date: Wed, 23 Nov 2022 19:23:51 +0200 Subject: [PATCH 09/18] (firebase-analytics) code refactor - updated methods --- .../analytics/java/MainActivity.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java index d4a469418f..930016a436 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java @@ -21,7 +21,6 @@ package com.google.firebase.quickstart.analytics.java; -import android.annotation.SuppressLint; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; @@ -32,7 +31,6 @@ import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import androidx.lifecycle.Lifecycle; import androidx.preference.PreferenceManager; @@ -110,13 +108,13 @@ protected void onCreate(Bundle savedInstanceState) { mImagePagerAdapter = new ImagePagerAdapter(getSupportFragmentManager(), IMAGE_INFOS, getLifecycle()); // Set up the ViewPager with the pattern adapter. - mViewPager = binding.viewPager; + mViewPager = binding.viewPager; mViewPager.setAdapter(mImagePagerAdapter); mViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - super.onPageScrolled(position, positionOffset, positionOffsetPixels); + public void onPageSelected(int position) { + super.onPageSelected(position); recordImageView(); recordScreenView(); } @@ -233,9 +231,9 @@ private String getCurrentImageTitle() { * @return id of image */ private String getCurrentImageId() { - int position = 0; + int position = mViewPager.getCurrentItem();; ImageInfo info = IMAGE_INFOS[position]; - return getString(info.image); + return getString(info.id); } /** @@ -279,12 +277,19 @@ public class ImagePagerAdapter extends FragmentStateAdapter { private final ImageInfo[] infos; - @SuppressLint("WrongConstant") public ImagePagerAdapter(FragmentManager fm, ImageInfo[] infos, Lifecycle lifecyle) { super(fm, lifecyle); this.infos = infos; } + public CharSequence getPageTitle(int position) { + if (position < 0 || position >= infos.length) { + return null; + } + Locale l = Locale.getDefault(); + ImageInfo info = infos[position]; + return getString(info.title).toUpperCase(l); + } @NonNull @Override From 4d61fd2fbbd83a128abf528e9493fd120d41ee99 Mon Sep 17 00:00:00 2001 From: AlbertoYabeda Date: Wed, 23 Nov 2022 19:24:23 +0200 Subject: [PATCH 10/18] (firebase-analytics) code refactor - updated deprecated method --- .../analytics/kotlin/MainActivity.kt | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt index 63ab5f5abe..23402655ba 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt @@ -10,7 +10,10 @@ import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity +import androidx.fragment.app.FragmentManager +import androidx.lifecycle.Lifecycle import androidx.preference.PreferenceManager +import androidx.viewpager.widget.ViewPager import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.widget.ViewPager2 import com.google.android.material.tabs.TabLayout @@ -23,7 +26,8 @@ import com.google.firebase.quickstart.analytics.R import com.google.firebase.quickstart.analytics.databinding.ActivityMainBinding import com.google.firebase.quickstart.analytics.java.MainActivity import com.google.firebase.quickstart.analytics.kotlin.MainActivity.Companion.IMAGE_INFOS -import java.util.* +import java.util.Locale + /** * Activity which displays numerous background images that may be viewed. These background images @@ -77,13 +81,22 @@ class MainActivity : AppCompatActivity() { } // Create the adapter that will return a fragment for each image. - imagePagerAdapter = ImagePagerAdapter(this, IMAGE_INFOS) + imagePagerAdapter = ImagePagerAdapter(supportFragmentManager, IMAGE_INFOS, lifecycle) // Set up the ViewPager with the pattern adapter. - //binding.viewPager.adapter = imagePagerAdapter + binding.viewPager.adapter = imagePagerAdapter val viewPager: ViewPager2 = findViewById(R.id.viewPager) viewPager.adapter = imagePagerAdapter + val pageChangedCallback = object : ViewPager2.OnPageChangeCallback() { + override fun onPageSelected(position: Int) { + recordImageView() + recordScreenView() + } + } + + binding.viewPager.registerOnPageChangeCallback(pageChangedCallback) + val tabLayout: TabLayout = findViewById(R.id.tab_layout) TabLayoutMediator(tabLayout, viewPager) { tab, position -> tab.setText(IMAGE_INFOS[position].title) @@ -184,7 +197,7 @@ class MainActivity : AppCompatActivity() { * @return id of image */ private fun getCurrentImageId(): String { - val position = 0//binding.viewPager.currentItem + val position = binding.viewPager.currentItem val info = IMAGE_INFOS[position] return getString(info.id) } @@ -226,11 +239,11 @@ class MainActivity : AppCompatActivity() { * A [FragmentStateAdapter] that returns a fragment corresponding to * one of the sections/tabs/pages. */ - @SuppressLint("WrongConstant") inner class ImagePagerAdapter( - fm: FragmentActivity, - private val infos: Array - ) : FragmentStateAdapter(fm) { + fm: FragmentManager, + private val infos: Array, + lc: Lifecycle + ) : FragmentStateAdapter(fm, lc) { fun getPageTitle(position: Int): CharSequence? { if (position < 0 || position >= infos.size) { @@ -241,9 +254,7 @@ class MainActivity : AppCompatActivity() { return getString(info.title).uppercase(l) } - override fun getItemCount(): Int { - return infos.size - } + override fun getItemCount(): Int = infos.size override fun createFragment(position: Int): Fragment { val info = infos[position] From 30f0a5e3f425ac1148fd5c652ff87398e8e4e4a7 Mon Sep 17 00:00:00 2001 From: AlbertoYabeda Date: Wed, 23 Nov 2022 19:25:09 +0200 Subject: [PATCH 11/18] (firebase-analytics) - updated .gitignore --- analytics/.gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/analytics/.gitignore b/analytics/.gitignore index 7808d9c572..b5e0264696 100644 --- a/analytics/.gitignore +++ b/analytics/.gitignore @@ -2,7 +2,6 @@ /local.properties .DS_Store build/ -app/google-services.json # Android Studio .idea From 5df23e9239746d52e976a97d8ecb574bdc852900 Mon Sep 17 00:00:00 2001 From: AlbertoYabeda Date: Wed, 23 Nov 2022 22:06:08 +0200 Subject: [PATCH 12/18] (firebase-analytics) - fixed wrong file to ignore --- analytics/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analytics/.gitignore b/analytics/.gitignore index b5e0264696..245341354f 100644 --- a/analytics/.gitignore +++ b/analytics/.gitignore @@ -2,7 +2,7 @@ /local.properties .DS_Store build/ - +google-services.json # Android Studio .idea *.iml From bbed2d34ba5e218f41a9bb545064b9cafd3404e8 Mon Sep 17 00:00:00 2001 From: AlbertoYabeda Date: Wed, 23 Nov 2022 22:06:55 +0200 Subject: [PATCH 13/18] (firebase-analytics) code refact - removing unnecessary permissions --- analytics/app/src/main/AndroidManifest.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/analytics/app/src/main/AndroidManifest.xml b/analytics/app/src/main/AndroidManifest.xml index f18daad72f..f495e19d70 100644 --- a/analytics/app/src/main/AndroidManifest.xml +++ b/analytics/app/src/main/AndroidManifest.xml @@ -1,10 +1,5 @@ - - - - - Date: Wed, 23 Nov 2022 22:12:35 +0200 Subject: [PATCH 14/18] (firebase-analytics) code refact - removing unnecessary spaces --- .../google/firebase/quickstart/analytics/java/MainActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java index 930016a436..b9e52f7ea6 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/java/MainActivity.java @@ -231,7 +231,7 @@ private String getCurrentImageTitle() { * @return id of image */ private String getCurrentImageId() { - int position = mViewPager.getCurrentItem();; + int position = mViewPager.getCurrentItem(); ImageInfo info = IMAGE_INFOS[position]; return getString(info.id); } From 3bb877ff17dd744c2ddc3479668099cfd39cc5b1 Mon Sep 17 00:00:00 2001 From: AlbertoYabeda Date: Wed, 23 Nov 2022 22:13:10 +0200 Subject: [PATCH 15/18] (firebase-analytics) code refact - fixing nit --- .../firebase/quickstart/analytics/kotlin/MainActivity.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt index 23402655ba..81ddae3313 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt @@ -85,7 +85,7 @@ class MainActivity : AppCompatActivity() { // Set up the ViewPager with the pattern adapter. binding.viewPager.adapter = imagePagerAdapter - val viewPager: ViewPager2 = findViewById(R.id.viewPager) + val viewPager: ViewPager2 = binding.viewPager viewPager.adapter = imagePagerAdapter val pageChangedCallback = object : ViewPager2.OnPageChangeCallback() { @@ -97,7 +97,7 @@ class MainActivity : AppCompatActivity() { binding.viewPager.registerOnPageChangeCallback(pageChangedCallback) - val tabLayout: TabLayout = findViewById(R.id.tab_layout) + val tabLayout: TabLayout = binding.tabLayout TabLayoutMediator(tabLayout, viewPager) { tab, position -> tab.setText(IMAGE_INFOS[position].title) }.attach() @@ -242,8 +242,8 @@ class MainActivity : AppCompatActivity() { inner class ImagePagerAdapter( fm: FragmentManager, private val infos: Array, - lc: Lifecycle - ) : FragmentStateAdapter(fm, lc) { + lifecyle: Lifecycle + ) : FragmentStateAdapter(fm, lifecyle) { fun getPageTitle(position: Int): CharSequence? { if (position < 0 || position >= infos.size) { From 853f3988b3f43b5c19934f2f3337dc7a3ca7c142 Mon Sep 17 00:00:00 2001 From: AlbertoYabeda Date: Mon, 28 Nov 2022 11:20:31 +0200 Subject: [PATCH 16/18] (firebase-analytics) code refact --- analytics/.gitignore | 1 + analytics/app/src/main/AndroidManifest.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/analytics/.gitignore b/analytics/.gitignore index 245341354f..d46cccfd2b 100644 --- a/analytics/.gitignore +++ b/analytics/.gitignore @@ -3,6 +3,7 @@ .DS_Store build/ google-services.json + # Android Studio .idea *.iml diff --git a/analytics/app/src/main/AndroidManifest.xml b/analytics/app/src/main/AndroidManifest.xml index f495e19d70..ae27d65cf2 100644 --- a/analytics/app/src/main/AndroidManifest.xml +++ b/analytics/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ + Date: Tue, 29 Nov 2022 12:20:23 +0200 Subject: [PATCH 17/18] (firebase-analytics) code fix - layout nits --- analytics/app/src/main/res/layout/activity_main.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/analytics/app/src/main/res/layout/activity_main.xml b/analytics/app/src/main/res/layout/activity_main.xml index 5fa59da8c1..1afa9cd51f 100644 --- a/analytics/app/src/main/res/layout/activity_main.xml +++ b/analytics/app/src/main/res/layout/activity_main.xml @@ -22,15 +22,16 @@ specific language governing permissions and limitations under the License. android:id="@+id/tab_layout" android:layout_width="0dp" android:layout_height="wrap_content" - app:layout_constraintBottom_toTopOf="@+id/viewPager" - app:layout_constraintEnd_toEndOf="@id/viewPager" + app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> From 7cf0bff9cf587a1f13f8d7b17a6087b4b413aabe Mon Sep 17 00:00:00 2001 From: AlbertoYabeda Date: Tue, 29 Nov 2022 12:21:44 +0200 Subject: [PATCH 18/18] (firebase-analytics) code refact - removing code repetition and unused imports --- .../firebase/quickstart/analytics/kotlin/MainActivity.kt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt index 81ddae3313..003fd62fc5 100644 --- a/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt +++ b/analytics/app/src/main/java/com/google/firebase/quickstart/analytics/kotlin/MainActivity.kt @@ -9,11 +9,9 @@ import android.view.MenuItem import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment -import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentManager import androidx.lifecycle.Lifecycle import androidx.preference.PreferenceManager -import androidx.viewpager.widget.ViewPager import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.widget.ViewPager2 import com.google.android.material.tabs.TabLayout @@ -85,8 +83,6 @@ class MainActivity : AppCompatActivity() { // Set up the ViewPager with the pattern adapter. binding.viewPager.adapter = imagePagerAdapter - val viewPager: ViewPager2 = binding.viewPager - viewPager.adapter = imagePagerAdapter val pageChangedCallback = object : ViewPager2.OnPageChangeCallback() { override fun onPageSelected(position: Int) { @@ -98,7 +94,7 @@ class MainActivity : AppCompatActivity() { binding.viewPager.registerOnPageChangeCallback(pageChangedCallback) val tabLayout: TabLayout = binding.tabLayout - TabLayoutMediator(tabLayout, viewPager) { tab, position -> + TabLayoutMediator(tabLayout, binding.viewPager) { tab, position -> tab.setText(IMAGE_INFOS[position].title) }.attach()