From a8cc1462407a792e8e6bc857a892394929416afb Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Mon, 12 Jul 2021 17:17:00 +0200 Subject: [PATCH] android: Migrate from deprecated ViewPager to ViewPager2 for CA cert lists --- .../ui/TrustedCertificatesActivity.java | 49 ++++++++++--------- .../layout/trusted_certificates_activity.xml | 2 +- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/TrustedCertificatesActivity.java b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/TrustedCertificatesActivity.java index 508bc5350..ad665787b 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/TrustedCertificatesActivity.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/TrustedCertificatesActivity.java @@ -15,7 +15,6 @@ package org.strongswan.android.ui; -import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; @@ -23,6 +22,7 @@ import android.view.Menu; import android.view.MenuItem; import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; import org.strongswan.android.R; import org.strongswan.android.data.VpnProfileDataSource; @@ -35,19 +35,20 @@ import java.security.KeyStore; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; +import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; -import androidx.viewpager.widget.ViewPager; +import androidx.fragment.app.FragmentActivity; +import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.viewpager2.widget.ViewPager2; public class TrustedCertificatesActivity extends AppCompatActivity implements TrustedCertificateListFragment.OnTrustedCertificateSelectedListener, OnCertificateDeleteListener { public static final String SELECT_CERTIFICATE = "org.strongswan.android.action.SELECT_CERTIFICATE"; private static final String DIALOG_TAG = "Dialog"; private TrustedCertificatesPagerAdapter mAdapter; - private ViewPager mPager; + private ViewPager2 mPager; private boolean mSelect; private final ActivityResultLauncher mImportCertificate = registerForActivityResult( @@ -69,13 +70,15 @@ public class TrustedCertificatesActivity extends AppCompatActivity implements Tr ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); - mAdapter = new TrustedCertificatesPagerAdapter(getSupportFragmentManager(), this); + mAdapter = new TrustedCertificatesPagerAdapter(this); - mPager = (ViewPager)findViewById(R.id.viewpager); + mPager = (ViewPager2)findViewById(R.id.viewpager); mPager.setAdapter(mAdapter); TabLayout tabs = (TabLayout)findViewById(R.id.tabs); - tabs.setupWithViewPager(mPager); + new TabLayoutMediator(tabs, mPager, (tab, position) -> { + tab.setText(mAdapter.getTitle(position)); + }).attach(); mSelect = SELECT_CERTIFICATE.equals(getIntent().getAction()); } @@ -158,28 +161,21 @@ public class TrustedCertificatesActivity extends AppCompatActivity implements Tr TrustedCertificateManager.getInstance().reset(); } - public static class TrustedCertificatesPagerAdapter extends FragmentPagerAdapter + public static class TrustedCertificatesPagerAdapter extends FragmentStateAdapter { private TrustedCertificatesTab mTabs[]; - public TrustedCertificatesPagerAdapter(FragmentManager fm, Context context) + public TrustedCertificatesPagerAdapter(@NonNull FragmentActivity fragmentActivity) { - super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); + super(fragmentActivity); mTabs = new TrustedCertificatesTab[]{ - new TrustedCertificatesTab(context.getString(R.string.system_tab), TrustedCertificateSource.SYSTEM), - new TrustedCertificatesTab(context.getString(R.string.user_tab), TrustedCertificateSource.USER), - new TrustedCertificatesTab(context.getString(R.string.local_tab), TrustedCertificateSource.LOCAL), + new TrustedCertificatesTab(fragmentActivity.getString(R.string.system_tab), TrustedCertificateSource.SYSTEM), + new TrustedCertificatesTab(fragmentActivity.getString(R.string.user_tab), TrustedCertificateSource.USER), + new TrustedCertificatesTab(fragmentActivity.getString(R.string.local_tab), TrustedCertificateSource.LOCAL), }; } - @Override - public int getCount() - { - return mTabs.length; - } - - @Override - public CharSequence getPageTitle(int position) + public CharSequence getTitle(int position) { return mTabs[position].getTitle(); } @@ -190,7 +186,14 @@ public class TrustedCertificatesActivity extends AppCompatActivity implements Tr } @Override - public Fragment getItem(int position) + public int getItemCount() + { + return mTabs.length; + } + + @NonNull + @Override + public Fragment createFragment(int position) { TrustedCertificateListFragment fragment = new TrustedCertificateListFragment(); Bundle args = new Bundle(); diff --git a/src/frontends/android/app/src/main/res/layout/trusted_certificates_activity.xml b/src/frontends/android/app/src/main/res/layout/trusted_certificates_activity.xml index 44b45e628..f560c0a08 100644 --- a/src/frontends/android/app/src/main/res/layout/trusted_certificates_activity.xml +++ b/src/frontends/android/app/src/main/res/layout/trusted_certificates_activity.xml @@ -26,7 +26,7 @@ app:tabGravity="fill" app:tabMode="fixed"/> -