From de2fbd0e3fb799426e2572b315c754cc402e422b Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Thu, 26 Nov 2015 16:44:46 +0100 Subject: [PATCH] android: Avoid deprecated tabs in the ActionBar in TrustedCertificatesActivity Instead we use TabLayout and ViewPager from the support libraries. --- .../ui/TrustedCertificatesActivity.java | 156 ++++++++---------- .../layout/trusted_certificates_activity.xml | 25 ++- 2 files changed, 91 insertions(+), 90 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 c817438f4..fd8a51944 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 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-2014 Tobias Brunner + * Copyright (C) 2012-2015 Tobias Brunner * Hochschule fuer Technik Rapperswil * * This program is free software; you can redistribute it and/or modify it @@ -16,11 +16,15 @@ package org.strongswan.android.ui; import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; +import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.view.Menu; @@ -40,6 +44,8 @@ public class TrustedCertificatesActivity extends AppCompatActivity implements Tr public static final String SELECT_CERTIFICATE = "org.strongswan.android.action.SELECT_CERTIFICATE"; private static final String DIALOG_TAG = "Dialog"; private static final int IMPORT_CERTIFICATE = 0; + private TrustedCertificatesPagerAdapter mAdapter; + private ViewPager mPager; private boolean mSelect; @Override @@ -50,42 +56,18 @@ public class TrustedCertificatesActivity extends AppCompatActivity implements Tr ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); - actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); - TrustedCertificatesTabListener listener; - listener = new TrustedCertificatesTabListener(this, "system", TrustedCertificateSource.SYSTEM); - actionBar.addTab(actionBar - .newTab() - .setText(R.string.system_tab) - .setTag(listener) - .setTabListener(listener)); - listener = new TrustedCertificatesTabListener(this, "user", TrustedCertificateSource.USER); - actionBar.addTab(actionBar - .newTab() - .setText(R.string.user_tab) - .setTag(listener) - .setTabListener(listener)); - listener = new TrustedCertificatesTabListener(this, "local", TrustedCertificateSource.LOCAL); - actionBar.addTab(actionBar - .newTab() - .setText(R.string.local_tab) - .setTag(listener) - .setTabListener(listener)); + mAdapter = new TrustedCertificatesPagerAdapter(getSupportFragmentManager(), this); + + mPager = (ViewPager)findViewById(R.id.viewpager); + mPager.setAdapter(mAdapter); + + TabLayout tabs = (TabLayout)findViewById(R.id.tabs); + tabs.setupWithViewPager(mPager); - if (savedInstanceState != null) - { - actionBar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0)); - } mSelect = SELECT_CERTIFICATE.equals(getIntent().getAction()); } - @Override - protected void onSaveInstanceState(Bundle outState) - { - super.onSaveInstanceState(outState); - outState.putInt("tab", getSupportActionBar().getSelectedNavigationIndex()); - } - @Override public boolean onCreateOptionsMenu(Menu menu) { @@ -148,18 +130,13 @@ public class TrustedCertificatesActivity extends AppCompatActivity implements Tr setResult(Activity.RESULT_OK, intent); finish(); } - else + else if (mAdapter.getSource(mPager.getCurrentItem()) == TrustedCertificateSource.LOCAL) { - TrustedCertificatesTabListener listener; - listener = (TrustedCertificatesTabListener)getSupportActionBar().getSelectedTab().getTag(); - if (listener.mTag == "local") - { - Bundle args = new Bundle(); - args.putString(CertificateDeleteConfirmationDialog.ALIAS, selected.getAlias()); - CertificateDeleteConfirmationDialog dialog = new CertificateDeleteConfirmationDialog(); - dialog.setArguments(args); - dialog.show(getSupportFragmentManager(), DIALOG_TAG); - } + Bundle args = new Bundle(); + args.putString(CertificateDeleteConfirmationDialog.ALIAS, selected.getAlias()); + CertificateDeleteConfirmationDialog dialog = new CertificateDeleteConfirmationDialog(); + dialog.setArguments(args); + dialog.show(getSupportFragmentManager(), DIALOG_TAG); } } @@ -184,58 +161,67 @@ public class TrustedCertificatesActivity extends AppCompatActivity implements Tr TrustedCertificateManager.getInstance().reset(); } - public static class TrustedCertificatesTabListener implements ActionBar.TabListener + public static class TrustedCertificatesPagerAdapter extends FragmentPagerAdapter { - private final String mTag; + private TrustedCertificatesTab mTabs[]; + + public TrustedCertificatesPagerAdapter(FragmentManager fm, Context context) + { + super(fm); + 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), + }; + } + + @Override + public int getCount() + { + return mTabs.length; + } + + @Override + public CharSequence getPageTitle(int position) + { + return mTabs[position].getTitle(); + } + + public TrustedCertificateSource getSource(int position) + { + return mTabs[position].getSource(); + } + + @Override + public Fragment getItem(int position) + { + TrustedCertificateListFragment fragment = new TrustedCertificateListFragment(); + Bundle args = new Bundle(); + args.putSerializable(TrustedCertificateListFragment.EXTRA_CERTIFICATE_SOURCE, mTabs[position].getSource()); + fragment.setArguments(args); + return fragment; + } + } + + public static class TrustedCertificatesTab + { + private final String mTitle; private final TrustedCertificateSource mSource; - private Fragment mFragment; - public TrustedCertificatesTabListener(AppCompatActivity activity, String tag, TrustedCertificateSource source) + public TrustedCertificatesTab(String title, TrustedCertificateSource source) { - mTag = tag; + mTitle = title; mSource = source; - /* check to see if we already have a fragment for this tab, probably - * from a previously saved state. if so, deactivate it, because the - * initial state is that no tab is shown */ - mFragment = activity.getSupportFragmentManager().findFragmentByTag(mTag); - if (mFragment != null && !mFragment.isDetached()) - { - FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction(); - ft.detach(mFragment); - ft.commit(); - } } - @Override - public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) + public String getTitle() { - if (mFragment == null) - { - mFragment = new TrustedCertificateListFragment(); - Bundle args = new Bundle(); - args.putSerializable(TrustedCertificateListFragment.EXTRA_CERTIFICATE_SOURCE, mSource); - mFragment.setArguments(args); - ft.add(android.R.id.content, mFragment, mTag); - } - else - { - ft.attach(mFragment); - } + return mTitle; } - @Override - public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) + public TrustedCertificateSource getSource() { - if (mFragment != null) - { - ft.detach(mFragment); - } - } - - @Override - public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) - { - /* nothing to be done */ + return mSource; } } } 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 966ecf25e..aeefd819a 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 @@ -1,6 +1,6 @@ - + - + + + + +