aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src
diff options
context:
space:
mode:
Diffstat (limited to 'OpenKeychain/src')
-rw-r--r--OpenKeychain/src/main/AndroidManifest.xml5
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java78
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvancedActivity.java93
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvancedFragment.java (renamed from OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyCertsFragment.java)183
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyKeysFragment.java113
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java10
-rw-r--r--OpenKeychain/src/main/res/layout/view_key_advanced_activity.xml22
-rw-r--r--OpenKeychain/src/main/res/layout/view_key_advanced_fragment.xml87
-rw-r--r--OpenKeychain/src/main/res/layout/view_key_certs_fragment.xml47
-rw-r--r--OpenKeychain/src/main/res/layout/view_key_keys_fragment.xml32
-rw-r--r--OpenKeychain/src/main/res/menu/key_view.xml1
-rw-r--r--OpenKeychain/src/main/res/values/strings.xml2
12 files changed, 330 insertions, 343 deletions
diff --git a/OpenKeychain/src/main/AndroidManifest.xml b/OpenKeychain/src/main/AndroidManifest.xml
index dd394a6d1..6cfb07189 100644
--- a/OpenKeychain/src/main/AndroidManifest.xml
+++ b/OpenKeychain/src/main/AndroidManifest.xml
@@ -415,6 +415,11 @@
android:value=".ui.ViewKeyActivity" />
</activity>
<activity
+ android:name=".ui.ViewKeyAdvancedActivity"
+ android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
+ android:label="@string/title_advanced_key_info">
+ </activity>
+ <activity
android:name=".ui.PreferencesActivity"
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
android:label="@string/title_preferences">
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 cfca0712f..0bc75b3a9 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java
@@ -78,8 +78,6 @@ public class ViewKeyActivity extends ActionBarActivity implements
public static final String EXTRA_SELECTED_TAB = "selected_tab";
public static final int TAB_MAIN = 0;
public static final int TAB_SHARE = 1;
- public static final int TAB_KEYS = 2;
- public static final int TAB_CERTS = 3;
// view
private ViewPager mViewPager;
@@ -100,9 +98,6 @@ public class ViewKeyActivity extends ActionBarActivity implements
private static final int LOADER_ID_UNIFIED = 0;
- private boolean mShowAdvancedTabs;
-
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -129,7 +124,7 @@ public class ViewKeyActivity extends ActionBarActivity implements
mSlidingTabLayout.setCustomTabColorizer(new TabColorizer() {
@Override
public int getIndicatorColor(int position) {
- return position == TAB_CERTS || position == TAB_KEYS ? 0xFFFF4444 : 0xFFAA66CC;
+ return 0xFFAA66CC;
}
@Override
@@ -168,12 +163,7 @@ public class ViewKeyActivity extends ActionBarActivity implements
initNfc(mDataUri);
- mShowAdvancedTabs = Preferences.getPreferences(this).getShowAdvancedTabs();
-
initTabs(mDataUri);
- if (mShowAdvancedTabs) {
- addAdvancedTabs(mDataUri);
- }
// switch to tab selected by extra
mViewPager.setCurrentItem(switchToTab);
@@ -197,66 +187,11 @@ public class ViewKeyActivity extends ActionBarActivity implements
mSlidingTabLayout.setViewPager(mViewPager);
}
- private void addAdvancedTabs(Uri dataUri) {
- Bundle keyDetailsBundle = new Bundle();
- keyDetailsBundle.putParcelable(ViewKeyKeysFragment.ARG_DATA_URI, dataUri);
- mTabsAdapter.addTab(ViewKeyKeysFragment.class,
- keyDetailsBundle, getString(R.string.key_view_tab_keys));
-
- Bundle certBundle = new Bundle();
- certBundle.putParcelable(ViewKeyCertsFragment.ARG_DATA_URI, dataUri);
- mTabsAdapter.addTab(ViewKeyCertsFragment.class,
- certBundle, getString(R.string.key_view_tab_certs));
-
- // update layout after operations
- mSlidingTabLayout.setViewPager(mViewPager);
- }
-
- 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);
- }
-
@Override
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;
}
@@ -279,14 +214,9 @@ public class ViewKeyActivity extends ActionBarActivity implements
return true;
}
case R.id.menu_key_view_advanced: {
- mShowAdvancedTabs = !mShowAdvancedTabs;
- Preferences.getPreferences(this).setShowAdvancedTabs(mShowAdvancedTabs);
- item.setChecked(mShowAdvancedTabs);
- if (mShowAdvancedTabs) {
- addAdvancedTabs(mDataUri);
- } else {
- removeAdvancedTabs();
- }
+ Intent advancedIntent = new Intent(this, ViewKeyAdvancedActivity.class);
+ advancedIntent.setData(mDataUri);
+ startActivity(advancedIntent);
}
}
} catch (ProviderHelper.NotFoundException e) {
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvancedActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvancedActivity.java
new file mode 100644
index 000000000..f49f8e7cf
--- /dev/null
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvancedActivity.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2013-2014 Dominik Schürmann <dominik@dominikschuermann.de>
+ * Copyright (C) 2013 Bahtiar 'kalkin' Gadimov
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.sufficientlysecure.keychain.ui;
+
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.ActionBarActivity;
+import android.view.View;
+
+import org.sufficientlysecure.keychain.Constants;
+import org.sufficientlysecure.keychain.R;
+import org.sufficientlysecure.keychain.provider.ProviderHelper;
+import org.sufficientlysecure.keychain.ui.util.ActionBarHelper;
+import org.sufficientlysecure.keychain.util.ExportHelper;
+import org.sufficientlysecure.keychain.util.Log;
+
+public class ViewKeyAdvancedActivity extends ActionBarActivity {
+
+ ExportHelper mExportHelper;
+ ProviderHelper mProviderHelper;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ mExportHelper = new ExportHelper(this);
+ mProviderHelper = new ProviderHelper(this);
+
+ // Inflate a "Done" custom action bar
+ ActionBarHelper.setOneButtonView(getSupportActionBar(),
+ R.string.btn_okay, R.drawable.ic_action_done,
+ new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ // "Done"
+ finish();
+ }
+ }
+ );
+
+ setContentView(R.layout.view_key_advanced_activity);
+
+ Uri dataUri = getIntent().getData();
+ if (dataUri == null) {
+ Log.e(Constants.TAG, "Data missing. Should be uri of key!");
+ finish();
+ return;
+ }
+
+ Log.i(Constants.TAG, "mDataUri: " + dataUri.toString());
+
+ startFragment(savedInstanceState, dataUri);
+ }
+
+
+ private void startFragment(Bundle savedInstanceState, Uri dataUri) {
+ // However, if we're being restored from a previous state,
+ // then we don't need to do anything and should return or else
+ // we could end up with overlapping fragments.
+ if (savedInstanceState != null) {
+ return;
+ }
+
+ // Create an instance of the fragment
+ ViewKeyAdvancedFragment frag = ViewKeyAdvancedFragment.newInstance(dataUri);
+
+ // Add the fragment to the 'fragment_container' FrameLayout
+ // NOTE: We use commitAllowingStateLoss() to prevent weird crashes!
+ getSupportFragmentManager().beginTransaction()
+ .replace(R.id.view_key_advanced_fragment, frag)
+ .commitAllowingStateLoss();
+ // do it immediately!
+ getSupportFragmentManager().executePendingTransactions();
+ }
+
+}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyCertsFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvancedFragment.java
index 6b1cee221..9c37f2d94 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyCertsFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvancedFragment.java
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2014 Dominik Schürmann <dominik@dominikschuermann.de>
- * Copyright (C) 2014 Vincent Breitmoser <v.breitmoser@mugenguild.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -22,70 +21,88 @@ import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
-import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
-import android.text.SpannableStringBuilder;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
+import android.widget.ListView;
import android.widget.TextView;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.KeyRing;
-import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.pgp.WrappedSignature;
-import org.sufficientlysecure.keychain.provider.KeychainContract.Certs;
-import org.sufficientlysecure.keychain.provider.KeychainDatabase.Tables;
+import org.sufficientlysecure.keychain.provider.KeychainContract;
+import org.sufficientlysecure.keychain.provider.KeychainDatabase;
+import org.sufficientlysecure.keychain.ui.adapter.SubkeysAdapter;
+import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.util.Log;
import se.emilsjolander.stickylistheaders.StickyListHeadersAdapter;
import se.emilsjolander.stickylistheaders.StickyListHeadersListView;
-public class ViewKeyCertsFragment extends LoaderFragment
- implements LoaderManager.LoaderCallbacks<Cursor>, AdapterView.OnItemClickListener {
+public class ViewKeyAdvancedFragment extends LoaderFragment implements
+ LoaderManager.LoaderCallbacks<Cursor>, AdapterView.OnItemClickListener {
+
+ public static final String ARG_DATA_URI = "data_uri";
+
+ private ListView mSubkeysList;
+ private SubkeysAdapter mSubkeysAdapter;
+
+ private StickyListHeadersListView mStickyList;
+ private CertListAdapter mCertsAdapter;
+
+ private Uri mDataUriSubkeys;
+ private Uri mDataUriCerts;
+
+ private static final int LOADER_SUBKEYS = 1;
+ private static final int LOADER_CERTS = 2;
// These are the rows that we will retrieve.
- static final String[] PROJECTION = new String[]{
- Certs._ID,
- Certs.MASTER_KEY_ID,
- Certs.VERIFIED,
- Certs.TYPE,
- Certs.RANK,
- Certs.KEY_ID_CERTIFIER,
- Certs.USER_ID,
- Certs.SIGNER_UID
+ static final String[] CERTS_PROJECTION = new String[]{
+ KeychainContract.Certs._ID,
+ KeychainContract.Certs.MASTER_KEY_ID,
+ KeychainContract.Certs.VERIFIED,
+ KeychainContract.Certs.TYPE,
+ KeychainContract.Certs.RANK,
+ KeychainContract.Certs.KEY_ID_CERTIFIER,
+ KeychainContract.Certs.USER_ID,
+ KeychainContract.Certs.SIGNER_UID
};
// sort by our user id,
- static final String SORT_ORDER =
- Tables.CERTS + "." + Certs.RANK + " ASC, "
- + Certs.VERIFIED + " DESC, "
- + Certs.TYPE + " DESC, "
- + Certs.SIGNER_UID + " ASC";
+ static final String CERTS_SORT_ORDER =
+ KeychainDatabase.Tables.CERTS + "." + KeychainContract.Certs.RANK + " ASC, "
+ + KeychainContract.Certs.VERIFIED + " DESC, "
+ + KeychainContract.Certs.TYPE + " DESC, "
+ + KeychainContract.Certs.SIGNER_UID + " ASC";
- public static final String ARG_DATA_URI = "data_uri";
-
- private StickyListHeadersListView mStickyList;
- private CertListAdapter mAdapter;
+ /**
+ * Creates new instance of this fragment
+ */
+ public static ViewKeyAdvancedFragment newInstance(Uri dataUri) {
+ ViewKeyAdvancedFragment frag = new ViewKeyAdvancedFragment();
- private Uri mDataUri;
+ Bundle args = new Bundle();
+ args.putParcelable(ARG_DATA_URI, dataUri);
- // starting with 4 for this fragment
- private static final int LOADER_ID = 4;
+ frag.setArguments(args);
+ return frag;
+ }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup superContainer, Bundle savedInstanceState) {
View root = super.onCreateView(inflater, superContainer, savedInstanceState);
- View view = inflater.inflate(R.layout.view_key_certs_fragment, getContainer());
+ View view = inflater.inflate(R.layout.view_key_advanced_fragment, getContainer());
- mStickyList = (StickyListHeadersListView) view.findViewById(R.id.list);
+ mSubkeysList = (ListView) view.findViewById(R.id.keys);
+ mStickyList = (StickyListHeadersListView) view.findViewById(R.id.certs_list);
return root;
}
@@ -94,53 +111,95 @@ public class ViewKeyCertsFragment extends LoaderFragment
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- if (!getArguments().containsKey(ARG_DATA_URI)) {
+ Uri dataUri = getArguments().getParcelable(ARG_DATA_URI);
+ if (dataUri == null) {
Log.e(Constants.TAG, "Data missing. Should be Uri of key!");
getActivity().finish();
return;
}
- Uri uri = getArguments().getParcelable(ARG_DATA_URI);
- mDataUri = Certs.buildCertsUri(uri);
+ loadData(dataUri);
+ }
+
+ private void loadData(Uri dataUri) {
+ mDataUriSubkeys = KeychainContract.Keys.buildKeysUri(dataUri);
+ mDataUriCerts = KeychainContract.Certs.buildCertsUri(dataUri);
mStickyList.setAreHeadersSticky(true);
mStickyList.setDrawingListUnderStickyHeader(false);
- mStickyList.setFastScrollEnabled(true);
mStickyList.setOnItemClickListener(this);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
- mStickyList.setFastScrollAlwaysVisible(true);
- }
-
mStickyList.setEmptyView(getActivity().findViewById(R.id.empty));
// Create an empty adapter we will use to display the loaded data.
- mAdapter = new CertListAdapter(getActivity(), null);
- mStickyList.setAdapter(mAdapter);
+ mSubkeysAdapter = new SubkeysAdapter(getActivity(), null, 0);
+ mSubkeysList.setAdapter(mSubkeysAdapter);
- getLoaderManager().initLoader(LOADER_ID, null, this);
+ mCertsAdapter = new CertListAdapter(getActivity(), null);
+ mStickyList.setAdapter(mCertsAdapter);
+
+ // Prepare the loaders. Either re-connect with an existing ones,
+ // or start new ones.
+ getLoaderManager().initLoader(LOADER_SUBKEYS, null, this);
+ getLoaderManager().initLoader(LOADER_CERTS, null, this);
}
- @Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
setContentShown(false);
- // Now create and return a CursorLoader that will take care of
- // creating a Cursor for the data being displayed.
- return new CursorLoader(getActivity(), mDataUri, PROJECTION, null, null, SORT_ORDER);
+ switch (id) {
+ case LOADER_SUBKEYS:
+ return new CursorLoader(getActivity(), mDataUriSubkeys,
+ SubkeysAdapter.SUBKEYS_PROJECTION, null, null, null);
+
+ case LOADER_CERTS:
+ // Now create and return a CursorLoader that will take care of
+ // creating a Cursor for the data being displayed.
+ return new CursorLoader(getActivity(), mDataUriCerts,
+ CERTS_PROJECTION, null, null, CERTS_SORT_ORDER);
+
+ default:
+ return null;
+ }
}
- @Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ // Avoid NullPointerExceptions, if we get an empty result set.
+ if (data.getCount() == 0) {
+ return;
+ }
+
// Swap the new cursor in. (The framework will take care of closing the
// old cursor once we return.)
- mAdapter.swapCursor(data);
-
- mStickyList.setAdapter(mAdapter);
+ switch (loader.getId()) {
+ case LOADER_SUBKEYS:
+ mSubkeysAdapter.swapCursor(data);
+ break;
+ case LOADER_CERTS:
+ mCertsAdapter.swapCursor(data);
+ mStickyList.setAdapter(mCertsAdapter);
+ break;
+ }
+ // TODO: maybe show not before both are loaded!
setContentShown(true);
}
/**
+ * This is called when the last Cursor provided to onLoadFinished() above is about to be closed.
+ * We need to make sure we are no longer using it.
+ */
+ public void onLoaderReset(Loader<Cursor> loader) {
+ switch (loader.getId()) {
+ case LOADER_SUBKEYS:
+ mSubkeysAdapter.swapCursor(null);
+ break;
+ case LOADER_CERTS:
+ mCertsAdapter.swapCursor(null);
+ break;
+ }
+ }
+
+ /**
* On click on item, start key view activity
*/
@Override
@@ -151,19 +210,12 @@ public class ViewKeyCertsFragment extends LoaderFragment
long certifierId = (Long) view.getTag(R.id.tag_certifierId);
Intent viewIntent = new Intent(getActivity(), ViewCertActivity.class);
- viewIntent.setData(Certs.buildCertsSpecificUri(
+ viewIntent.setData(KeychainContract.Certs.buildCertsSpecificUri(
masterKeyId, rank, certifierId));
startActivity(viewIntent);
}
}
- @Override
- public void onLoaderReset(Loader<Cursor> loader) {
- // This is called when the last Cursor provided to onLoadFinished()
- // above is about to be closed. We need to make sure we are no
- // longer using it.
- mAdapter.swapCursor(null);
- }
/**
* Implements StickyListHeadersAdapter from library
@@ -196,13 +248,13 @@ public class ViewKeyCertsFragment extends LoaderFragment
*/
private void initIndex(Cursor cursor) {
if (cursor != null) {
- mIndexMasterKeyId = cursor.getColumnIndexOrThrow(Certs.MASTER_KEY_ID);
- mIndexUserId = cursor.getColumnIndexOrThrow(Certs.USER_ID);
- mIndexRank = cursor.getColumnIndexOrThrow(Certs.RANK);
- mIndexType = cursor.getColumnIndexOrThrow(Certs.TYPE);
- mIndexVerified = cursor.getColumnIndexOrThrow(Certs.VERIFIED);
- mIndexSignerKeyId = cursor.getColumnIndexOrThrow(Certs.KEY_ID_CERTIFIER);
- mIndexSignerUserId = cursor.getColumnIndexOrThrow(Certs.SIGNER_UID);
+ mIndexMasterKeyId = cursor.getColumnIndexOrThrow(KeychainContract.Certs.MASTER_KEY_ID);
+ mIndexUserId = cursor.getColumnIndexOrThrow(KeychainContract.Certs.USER_ID);
+ mIndexRank = cursor.getColumnIndexOrThrow(KeychainContract.Certs.RANK);
+ mIndexType = cursor.getColumnIndexOrThrow(KeychainContract.Certs.TYPE);
+ mIndexVerified = cursor.getColumnIndexOrThrow(KeychainContract.Certs.VERIFIED);
+ mIndexSignerKeyId = cursor.getColumnIndexOrThrow(KeychainContract.Certs.KEY_ID_CERTIFIER);
+ mIndexSignerUserId = cursor.getColumnIndexOrThrow(KeychainContract.Certs.SIGNER_UID);
}
}
@@ -323,5 +375,4 @@ public class ViewKeyCertsFragment extends LoaderFragment
}
}
-
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyKeysFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyKeysFragment.java
deleted file mode 100644
index e46637871..000000000
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyKeysFragment.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2014 Dominik Schürmann <dominik@dominikschuermann.de>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package org.sufficientlysecure.keychain.ui;
-
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.support.v4.app.LoaderManager;
-import android.support.v4.content.CursorLoader;
-import android.support.v4.content.Loader;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ListView;
-
-import org.sufficientlysecure.keychain.Constants;
-import org.sufficientlysecure.keychain.R;
-import org.sufficientlysecure.keychain.provider.KeychainContract.Keys;
-import org.sufficientlysecure.keychain.ui.adapter.SubkeysAdapter;
-import org.sufficientlysecure.keychain.util.Log;
-
-
-public class ViewKeyKeysFragment extends LoaderFragment implements
- LoaderManager.LoaderCallbacks<Cursor> {
-
- public static final String ARG_DATA_URI = "uri";
-
- private ListView mKeys;
-
- private SubkeysAdapter mKeysAdapter;
-
- private Uri mDataUri;
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup superContainer, Bundle savedInstanceState) {
- View root = super.onCreateView(inflater, superContainer, savedInstanceState);
- View view = inflater.inflate(R.layout.view_key_keys_fragment, getContainer());
-
- mKeys = (ListView) view.findViewById(R.id.keys);
-
- return root;
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
- Uri dataUri = getArguments().getParcelable(ARG_DATA_URI);
- if (dataUri == null) {
- Log.e(Constants.TAG, "Data missing. Should be Uri of key!");
- getActivity().finish();
- return;
- }
-
- loadData(dataUri);
- }
-
- private void loadData(Uri dataUri) {
- mDataUri = dataUri;
-
- Log.i(Constants.TAG, "mDataUri: " + mDataUri.toString());
-
- mKeysAdapter = new SubkeysAdapter(getActivity(), null, 0);
- mKeys.setAdapter(mKeysAdapter);
-
- // Prepare the loaders. Either re-connect with an existing ones,
- // or start new ones.
- getLoaderManager().initLoader(0, null, this);
- }
-
- public Loader<Cursor> onCreateLoader(int id, Bundle args) {
- setContentShown(false);
- Uri baseUri = Keys.buildKeysUri(mDataUri);
- return new CursorLoader(getActivity(), baseUri,
- SubkeysAdapter.SUBKEYS_PROJECTION, null, null, null);
- }
-
- public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
- // Avoid NullPointerExceptions, if we get an empty result set.
- if(data.getCount() == 0) {
- return;
- }
- // Swap the new cursor in. (The framework will take care of closing the
- // old cursor once we return.)
- mKeysAdapter.swapCursor(data);
-
- setContentShown(true);
- }
-
- /**
- * This is called when the last Cursor provided to onLoadFinished() above is about to be closed.
- * We need to make sure we are no longer using it.
- */
- public void onLoaderReset(Loader<Cursor> loader) {
- mKeysAdapter.swapCursor(null);
- }
-
-}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java
index 52e083fd4..65f4af880 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java
@@ -157,16 +157,6 @@ public class Preferences {
editor.commit();
}
- public boolean getShowAdvancedTabs() {
- return mSharedPreferences.getBoolean(Pref.SHOW_ADVANCED_TABS, false);
- }
-
- public void setShowAdvancedTabs(boolean value) {
- SharedPreferences.Editor editor = mSharedPreferences.edit();
- editor.putBoolean(Pref.SHOW_ADVANCED_TABS, value);
- editor.commit();
- }
-
public boolean getCachedConsolidate() {
return mSharedPreferences.getBoolean(Pref.CACHED_CONSOLIDATE, false);
}
diff --git a/OpenKeychain/src/main/res/layout/view_key_advanced_activity.xml b/OpenKeychain/src/main/res/layout/view_key_advanced_activity.xml
new file mode 100644
index 000000000..a581caa0e
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/view_key_advanced_activity.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <include layout="@layout/notify_area" />
+
+ <FrameLayout
+ android:id="@+id/content_frame"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <FrameLayout
+ android:id="@+id/view_key_advanced_fragment"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" />
+
+ </FrameLayout>
+
+</LinearLayout> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/layout/view_key_advanced_fragment.xml b/OpenKeychain/src/main/res/layout/view_key_advanced_fragment.xml
new file mode 100644
index 000000000..9a2190f7e
--- /dev/null
+++ b/OpenKeychain/src/main/res/layout/view_key_advanced_fragment.xml
@@ -0,0 +1,87 @@
+<!--<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"--><!--android:layout_width="match_parent"--><!--android:layout_height="match_parent">-->
+
+<!-- focusable and related properties to workaround http://stackoverflow.com/q/16182331-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:focusable="true"
+ android:focusableInTouchMode="true"
+ android:descendantFocusability="beforeDescendants"
+ android:orientation="vertical">
+
+ <TextView
+ style="@style/SectionHeader"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="4dp"
+ android:layout_marginTop="8dp"
+ android:layout_marginLeft="16dp"
+ android:layout_marginRight="16dp"
+ android:text="@string/section_keys" />
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="0.4">
+
+ <ListView
+ android:id="@+id/keys"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:scrollbarStyle="outsideOverlay"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:layout_marginBottom="8dp" />
+ </FrameLayout>
+
+ <TextView
+ style="@style/SectionHeader"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dp"
+ android:layout_marginLeft="16dp"
+ android:layout_marginRight="16dp"
+ android:text="@string/section_certs" />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:background="@color/holo_gray_bright"
+ android:padding="8dp"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:text="@string/certs_text"
+ android:gravity="center_horizontal" />
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dip"
+ android:background="?android:attr/listDivider"
+ android:id="@+id/view_key_status_divider" />
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="0.6">
+
+ <se.emilsjolander.stickylistheaders.StickyListHeadersListView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/certs_list"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp"
+ android:scrollbarStyle="outsideOverlay" />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text="@string/empty_certs"
+ android:id="@+id/empty"
+ android:visibility="gone"
+ android:layout_gravity="center" />
+
+ </FrameLayout>
+
+</LinearLayout>
+
+ <!--</ScrollView>-->
diff --git a/OpenKeychain/src/main/res/layout/view_key_certs_fragment.xml b/OpenKeychain/src/main/res/layout/view_key_certs_fragment.xml
deleted file mode 100644
index 1cf826b30..000000000
--- a/OpenKeychain/src/main/res/layout/view_key_certs_fragment.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@color/holo_gray_bright"
- android:padding="8dp"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:text="@string/certs_text"
- android:gravity="center_horizontal" />
-
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="?android:attr/listDivider"
- android:id="@+id/view_key_status_divider" />
-
- <FrameLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <se.emilsjolander.stickylistheaders.StickyListHeadersListView
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@+id/list"
- android:fastScrollEnabled="true"
- android:paddingBottom="16dp"
- android:paddingLeft="16dp"
- android:paddingRight="32dp"
- android:scrollbarStyle="outsideOverlay" />
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:text="@string/empty_certs"
- android:id="@+id/empty"
- android:visibility="gone"
- android:layout_gravity="center" />
-
- </FrameLayout>
-
-</LinearLayout>
-
diff --git a/OpenKeychain/src/main/res/layout/view_key_keys_fragment.xml b/OpenKeychain/src/main/res/layout/view_key_keys_fragment.xml
deleted file mode 100644
index caea22341..000000000
--- a/OpenKeychain/src/main/res/layout/view_key_keys_fragment.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <!-- focusable and related properties to workaround http://stackoverflow.com/q/16182331-->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:focusable="true"
- android:focusableInTouchMode="true"
- android:descendantFocusability="beforeDescendants"
- android:orientation="vertical"
- android:paddingLeft="16dp"
- android:paddingRight="16dp">
-
- <TextView
- style="@style/SectionHeader"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="4dp"
- android:layout_marginTop="8dp"
- android:text="@string/section_keys" />
-
- <org.sufficientlysecure.keychain.ui.widget.FixedListView
- android:id="@+id/keys"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="8dp" />
-
- </LinearLayout>
-
-</ScrollView>
diff --git a/OpenKeychain/src/main/res/menu/key_view.xml b/OpenKeychain/src/main/res/menu/key_view.xml
index 5a156b5ac..049c7013a 100644
--- a/OpenKeychain/src/main/res/menu/key_view.xml
+++ b/OpenKeychain/src/main/res/menu/key_view.xml
@@ -17,7 +17,6 @@
<item
android:id="@+id/menu_key_view_advanced"
app:showAsAction="never"
- android:checkable="true"
android:title="@string/menu_advanced" />
</menu> \ No newline at end of file
diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml
index 40f2d56be..48e26ae7f 100644
--- a/OpenKeychain/src/main/res/values/strings.xml
+++ b/OpenKeychain/src/main/res/values/strings.xml
@@ -40,6 +40,7 @@
<string name="title_log_display">"Log"</string>
<string name="title_create_key">"Create Key"</string>
<string name="title_exchange_keys">"Exchange Keys"</string>
+ <string name="title_advanced_key_info">"Advanced Key Info"</string>
<!-- section -->
<string name="section_user_ids">"Identities"</string>
@@ -59,6 +60,7 @@
<string name="section_key_to_certify">"Key to be certified"</string>
<string name="section_decrypt_files">"Files"</string>
<string name="section_decrypt_text">"Text"</string>
+ <string name="section_certs">"Certificates"</string>
<!-- button -->
<string name="btn_decrypt_verify_file">"Decrypt, verify, and save file"</string>