diff options
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java')
-rw-r--r-- | OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java | 102 |
1 files changed, 90 insertions, 12 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java index f27a4ad27..463c800d2 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java @@ -20,6 +20,7 @@ package org.sufficientlysecure.keychain.ui; import android.annotation.TargetApi; import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.net.Uri; @@ -32,6 +33,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.provider.ContactsContract; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; @@ -47,6 +49,7 @@ import com.devspark.appmsg.AppMsg; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.helper.ContactHelper; import org.sufficientlysecure.keychain.helper.ExportHelper; import org.sufficientlysecure.keychain.pgp.KeyRing; import org.sufficientlysecure.keychain.pgp.PgpKeyHelper; @@ -54,7 +57,7 @@ import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.ProviderHelper; import org.sufficientlysecure.keychain.ui.adapter.PagerTabStripAdapter; import org.sufficientlysecure.keychain.util.Log; -import org.sufficientlysecure.keychain.util.SlidingTabLayout; +import org.sufficientlysecure.keychain.ui.widget.SlidingTabLayout; import java.util.Date; import java.util.HashMap; @@ -92,6 +95,8 @@ public class ViewKeyActivity extends ActionBarActivity implements private static final int LOADER_ID_UNIFIED = 0; + private boolean mShowAdvancedTabs; + @Override protected void onCreate(Bundle savedInstanceState) { @@ -116,16 +121,13 @@ public class ViewKeyActivity extends ActionBarActivity implements mViewPager = (ViewPager) findViewById(R.id.view_key_pager); mSlidingTabLayout = (SlidingTabLayout) findViewById(R.id.view_key_sliding_tab_layout); - mTabsAdapter = new PagerTabStripAdapter(this); - mViewPager.setAdapter(mTabsAdapter); - int switchToTab = TAB_MAIN; Intent intent = getIntent(); if (intent.getExtras() != null && intent.getExtras().containsKey(EXTRA_SELECTED_TAB)) { switchToTab = intent.getExtras().getInt(EXTRA_SELECTED_TAB); } - Uri dataUri = getIntent().getData(); + Uri dataUri = getDataUri(); if (dataUri == null) { Log.e(Constants.TAG, "Data missing. Should be Uri of key!"); finish(); @@ -136,6 +138,18 @@ public class ViewKeyActivity extends ActionBarActivity implements initNfc(dataUri); + mShowAdvancedTabs = false; + + initTabs(dataUri); + + // switch to tab selected by extra + mViewPager.setCurrentItem(switchToTab); + } + + private void initTabs(Uri dataUri) { + mTabsAdapter = new PagerTabStripAdapter(this); + mViewPager.setAdapter(mTabsAdapter); + Bundle mainBundle = new Bundle(); mainBundle.putParcelable(ViewKeyMainFragment.ARG_DATA_URI, dataUri); mTabsAdapter.addTab(ViewKeyMainFragment.class, @@ -146,6 +160,11 @@ public class ViewKeyActivity extends ActionBarActivity implements mTabsAdapter.addTab(ViewKeyShareFragment.class, mainBundle, getString(R.string.key_view_tab_share)); + // update layout after operations + mSlidingTabLayout.setViewPager(mViewPager); + } + + private void addAdvancedTabs(Uri dataUri) { Bundle keyDetailsBundle = new Bundle(); keyDetailsBundle.putParcelable(ViewKeyKeysFragment.ARG_DATA_URI, dataUri); mTabsAdapter.addTab(ViewKeyKeysFragment.class, @@ -156,11 +175,54 @@ public class ViewKeyActivity extends ActionBarActivity implements mTabsAdapter.addTab(ViewKeyCertsFragment.class, certBundle, getString(R.string.key_view_tab_certs)); - // NOTE: must be after adding the tabs! + // update layout after operations mSlidingTabLayout.setViewPager(mViewPager); + } - // switch to tab selected by extra - mViewPager.setCurrentItem(switchToTab); + private void removeAdvancedTabs() { + // before removing, switch to the first tab if necessary + if (mViewPager.getCurrentItem() >= TAB_KEYS) { + // remove _after_ switching to the main tab + mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + } + + @Override + public void onPageSelected(int position) { + } + + @Override + public void onPageScrollStateChanged(int state) { + if (ViewPager.SCROLL_STATE_SETTLING == state) { + mTabsAdapter.removeTab(TAB_CERTS); + mTabsAdapter.removeTab(TAB_KEYS); + + // update layout after operations + mSlidingTabLayout.setViewPager(mViewPager); + + // remove this listener again +// mViewPager.setOnPageChangeListener(null); + } + } + }); + + mViewPager.setCurrentItem(TAB_MAIN); + } else { + mTabsAdapter.removeTab(TAB_CERTS); + mTabsAdapter.removeTab(TAB_KEYS); + } + + // update layout after operations + mSlidingTabLayout.setViewPager(mViewPager); + } + + private Uri getDataUri() { + Uri dataUri = getIntent().getData(); + if (dataUri != null && dataUri.getHost().equals(ContactsContract.AUTHORITY)) { + dataUri = ContactHelper.dataUriFromContactUri(this, dataUri); + } + return dataUri; } private void loadData(Uri dataUri) { @@ -177,6 +239,9 @@ public class ViewKeyActivity extends ActionBarActivity implements public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.key_view, menu); + + MenuItem showAdvancedInfoItem = menu.findItem(R.id.menu_key_view_advanced); + showAdvancedInfoItem.setChecked(mShowAdvancedTabs); return true; } @@ -184,24 +249,37 @@ public class ViewKeyActivity extends ActionBarActivity implements public boolean onOptionsItemSelected(MenuItem item) { try { switch (item.getItemId()) { - case android.R.id.home: + case android.R.id.home: { Intent homeIntent = new Intent(this, KeyListActivity.class); homeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(homeIntent); return true; - case R.id.menu_key_view_update: + } + case R.id.menu_key_view_update: { updateFromKeyserver(mDataUri, mProviderHelper); return true; - case R.id.menu_key_view_export_keyserver: + } + case R.id.menu_key_view_export_keyserver: { uploadToKeyserver(mDataUri); return true; - case R.id.menu_key_view_export_file: + } + case R.id.menu_key_view_export_file: { exportToFile(mDataUri, mExportHelper, mProviderHelper); return true; + } case R.id.menu_key_view_delete: { deleteKey(mDataUri, mExportHelper); return true; } + case R.id.menu_key_view_advanced: { + mShowAdvancedTabs = !mShowAdvancedTabs; + item.setChecked(mShowAdvancedTabs); + if (mShowAdvancedTabs) { + addAdvancedTabs(mDataUri); + } else { + removeAdvancedTabs(); + } + } } } catch (ProviderHelper.NotFoundException e) { AppMsg.makeText(this, R.string.error_key_not_found, AppMsg.STYLE_ALERT).show(); |