aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
diff options
context:
space:
mode:
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.java102
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();