diff options
Diffstat (limited to 'OpenKeychain/src')
16 files changed, 85 insertions, 34 deletions
diff --git a/OpenKeychain/src/main/java/android/support/v4/widget/FixedDrawerLayout.java b/OpenKeychain/src/main/java/android/support/v4/widget/FixedDrawerLayout.java new file mode 100644 index 000000000..1151818b6 --- /dev/null +++ b/OpenKeychain/src/main/java/android/support/v4/widget/FixedDrawerLayout.java @@ -0,0 +1,33 @@ +package android.support.v4.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.View; + +/** + * Fix for NullPointerException at android.support.v4.widget.DrawerLayout.isContentView(DrawerLayout.java:840) + * <p/> + * http://stackoverflow.com/a/18107942 + */ +public class FixedDrawerLayout extends DrawerLayout { + public FixedDrawerLayout(Context context) { + super(context); + } + + public FixedDrawerLayout(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public FixedDrawerLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + boolean isContentView(View child) { + if (child == null) { + return false; + } + return ((LayoutParams) child.getLayoutParams()).gravity == Gravity.NO_GRAVITY; + } +} diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java index 3d3e48c30..1dc822ac2 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java @@ -691,7 +691,7 @@ public class KeychainProvider extends ContentProvider { public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { Log.v(Constants.TAG, "update(uri=" + uri + ", values=" + values.toString() + ")"); - final SQLiteDatabase db = mKeychainDatabase.getWritableDatabase(); + final SQLiteDatabase db = getDb().getWritableDatabase(); int count = 0; try { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DrawerActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DrawerActivity.java index 088f593d4..9a5050eba 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DrawerActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DrawerActivity.java @@ -26,6 +26,7 @@ import android.os.Bundle; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; +import android.support.v4.widget.FixedDrawerLayout; import android.support.v7.app.ActionBarActivity; import android.view.LayoutInflater; import android.view.Menu; @@ -43,7 +44,7 @@ import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; public class DrawerActivity extends ActionBarActivity { - private DrawerLayout mDrawerLayout; + private FixedDrawerLayout mDrawerLayout; private ListView mDrawerList; private ActionBarDrawerToggle mDrawerToggle; @@ -58,7 +59,7 @@ public class DrawerActivity extends ActionBarActivity { protected void setupDrawerNavigation(Bundle savedInstanceState) { mDrawerTitle = getString(R.string.app_name); - mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); + mDrawerLayout = (FixedDrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ListView) findViewById(R.id.left_drawer); ViewGroup viewGroup = (ViewGroup) findViewById(R.id.content_frame); int leftMarginLoaded = ((ViewGroup.MarginLayoutParams) viewGroup.getLayoutParams()).leftMargin; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptAsymmetricFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptAsymmetricFragment.java index 36483ebc9..d1a5dca07 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptAsymmetricFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptAsymmetricFragment.java @@ -247,6 +247,7 @@ public class EncryptAsymmetricFragment extends Fragment { private void selectSecretKey() { Intent intent = new Intent(getActivity(), SelectSecretKeyActivity.class); + intent.putExtra(SelectSecretKeyActivity.EXTRA_FILTER_SIGN, true); startActivityForResult(intent, REQUEST_CODE_SECRET_KEYS); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyActivity.java index 0ff88d97c..9160d57de 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyActivity.java @@ -28,10 +28,10 @@ import org.sufficientlysecure.keychain.R; public class SelectSecretKeyActivity extends ActionBarActivity { public static final String EXTRA_FILTER_CERTIFY = "filter_certify"; + public static final String EXTRA_FILTER_SIGN = "filter_sign"; public static final String RESULT_EXTRA_MASTER_KEY_ID = "master_key_id"; - private boolean mFilterCertify; private SelectSecretKeyFragment mSelectFragment; @Override @@ -45,7 +45,8 @@ public class SelectSecretKeyActivity extends ActionBarActivity { actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setHomeButtonEnabled(false); - mFilterCertify = getIntent().getBooleanExtra(EXTRA_FILTER_CERTIFY, false); + boolean filterCertify = getIntent().getBooleanExtra(EXTRA_FILTER_CERTIFY, false); + boolean filterSign = getIntent().getBooleanExtra(EXTRA_FILTER_SIGN, false); // Check that the activity is using the layout version with // the fragment_container FrameLayout @@ -59,7 +60,7 @@ public class SelectSecretKeyActivity extends ActionBarActivity { } // Create an instance of the fragment - mSelectFragment = SelectSecretKeyFragment.newInstance(mFilterCertify); + mSelectFragment = SelectSecretKeyFragment.newInstance(filterCertify, filterSign); // Add the fragment to the 'fragment_container' FrameLayout getSupportFragmentManager().beginTransaction() diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyFragment.java index 118449b9b..6de03198e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyFragment.java @@ -41,18 +41,22 @@ public class SelectSecretKeyFragment extends ListFragment implements private SelectSecretKeyActivity mActivity; private SelectKeyCursorAdapter mAdapter; - private boolean mFilterCertify; + private boolean mFilterCertify, mFilterSign; private static final String ARG_FILTER_CERTIFY = "filter_certify"; + private static final String ARG_FILTER_SIGN = "filter_sign"; /** * Creates new instance of this fragment + * + * filterCertify and filterSign must not both be set! */ - public static SelectSecretKeyFragment newInstance(boolean filterCertify) { + public static SelectSecretKeyFragment newInstance(boolean filterCertify, boolean filterSign) { SelectSecretKeyFragment frag = new SelectSecretKeyFragment(); Bundle args = new Bundle(); args.putBoolean(ARG_FILTER_CERTIFY, filterCertify); + args.putBoolean(ARG_FILTER_CERTIFY, filterSign); frag.setArguments(args); return frag; @@ -63,6 +67,7 @@ public class SelectSecretKeyFragment extends ListFragment implements super.onCreate(savedInstanceState); mFilterCertify = getArguments().getBoolean(ARG_FILTER_CERTIFY); + mFilterSign = getArguments().getBoolean(ARG_FILTER_SIGN); } /** @@ -115,9 +120,10 @@ public class SelectSecretKeyFragment extends ListFragment implements KeyRings.USER_ID, KeyRings.EXPIRY, KeyRings.IS_REVOKED, + // can certify info only related to master key KeyRings.CAN_CERTIFY, + // has sign may be any subkey KeyRings.HAS_SIGN, - KeyRings.HAS_SECRET, KeyRings.HAS_ANY_SECRET }; @@ -152,7 +158,7 @@ public class SelectSecretKeyFragment extends ListFragment implements private class SelectSecretKeyCursorAdapter extends SelectKeyCursorAdapter { - private int mIndexHasSecret, mIndexHasSign, mIndexCanCertify; + private int mIndexHasSign, mIndexCanCertify; public SelectSecretKeyCursorAdapter(Context context, Cursor c, int flags, ListView listView) { super(context, c, flags, listView); @@ -162,7 +168,6 @@ public class SelectSecretKeyFragment extends ListFragment implements protected void initIndex(Cursor cursor) { super.initIndex(cursor); if (cursor != null) { - mIndexHasSecret = cursor.getColumnIndexOrThrow(KeyRings.HAS_SECRET); mIndexCanCertify = cursor.getColumnIndexOrThrow(KeyRings.CAN_CERTIFY); mIndexHasSign = cursor.getColumnIndexOrThrow(KeyRings.HAS_SIGN); } @@ -179,23 +184,26 @@ public class SelectSecretKeyFragment extends ListFragment implements // Special from superclass: Te boolean enabled = false; if((Boolean) h.status.getTag()) { - if (cursor.getInt(mIndexHasSecret) == 0) { - h.status.setText(R.string.no_subkey); // Check if key is viable for our purposes (certify or sign) - } else if(mFilterCertify) { + if(mFilterCertify) { + // Only enable if can certify if (cursor.getInt(mIndexCanCertify) == 0) { h.status.setText(R.string.can_certify_not); } else { h.status.setText(R.string.can_certify); enabled = true; } - } else { + } else if(mFilterSign) { + // Only enable if can sign if (cursor.getInt(mIndexHasSign) == 0) { - h.status.setText(R.string.no_key); + h.status.setText(R.string.can_sign_not); } else { h.status.setText(R.string.can_sign); enabled = true; } + } else { + // No filters, just enable + enabled = true; } } h.setEnabled(enabled); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyLayoutFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyLayoutFragment.java index a0aa97567..8db750917 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyLayoutFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SelectSecretKeyLayoutFragment.java @@ -45,7 +45,7 @@ public class SelectSecretKeyLayoutFragment extends Fragment implements LoaderMan private TextView mKeyMasterKeyIdHex; private TextView mNoKeySelected; private BootstrapButton mSelectKeyButton; - private Boolean mFilterCertify; + private Boolean mFilterCertify, mFilterSign; private Uri mReceivedUri = null; @@ -72,10 +72,14 @@ public class SelectSecretKeyLayoutFragment extends Fragment implements LoaderMan mCallback = callback; } - public void setFilterCertify(Boolean filterCertify) { + public void setFilterCertify(boolean filterCertify) { mFilterCertify = filterCertify; } + public void setFilterSign(boolean filterSign) { + mFilterSign = filterSign; + } + public void setNoKeySelected() { mNoKeySelected.setVisibility(View.VISIBLE); mKeyUserId.setVisibility(View.GONE); @@ -115,6 +119,7 @@ public class SelectSecretKeyLayoutFragment extends Fragment implements LoaderMan mSelectKeyButton = (BootstrapButton) view .findViewById(R.id.select_secret_key_select_key_button); mFilterCertify = false; + mFilterSign = false; mSelectKeyButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @@ -135,6 +140,7 @@ public class SelectSecretKeyLayoutFragment extends Fragment implements LoaderMan private void startSelectKeyActivity() { Intent intent = new Intent(getActivity(), SelectSecretKeyActivity.class); intent.putExtra(SelectSecretKeyActivity.EXTRA_FILTER_CERTIFY, mFilterCertify); + intent.putExtra(SelectSecretKeyActivity.EXTRA_FILTER_SIGN, mFilterSign); startActivityForResult(intent, REQUEST_CODE_SELECT_KEY); } diff --git a/OpenKeychain/src/main/res/layout-large/api_apps_list_activity.xml b/OpenKeychain/src/main/res/layout-large/api_apps_list_activity.xml index c0021261e..88686bbbc 100644 --- a/OpenKeychain/src/main/res/layout-large/api_apps_list_activity.xml +++ b/OpenKeychain/src/main/res/layout-large/api_apps_list_activity.xml @@ -4,7 +4,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > - <android.support.v4.widget.DrawerLayout + <android.support.v4.widget.FixedDrawerLayout android:id="@+id/drawer_layout" android:layout_width="match_parent" @@ -13,7 +13,7 @@ <include layout="@layout/drawer_list"/> - </android.support.v4.widget.DrawerLayout> + </android.support.v4.widget.FixedDrawerLayout> <include layout="@layout/api_apps_list_content"/> diff --git a/OpenKeychain/src/main/res/layout-large/decrypt_activity.xml b/OpenKeychain/src/main/res/layout-large/decrypt_activity.xml index 26aed0831..9e9f37391 100644 --- a/OpenKeychain/src/main/res/layout-large/decrypt_activity.xml +++ b/OpenKeychain/src/main/res/layout-large/decrypt_activity.xml @@ -4,7 +4,7 @@ android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> - <android.support.v4.widget.DrawerLayout + <android.support.v4.widget.FixedDrawerLayout xmlns:bootstrapbutton="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_parent" @@ -12,7 +12,7 @@ <include layout="@layout/drawer_list"/> - </android.support.v4.widget.DrawerLayout> + </android.support.v4.widget.FixedDrawerLayout> <include layout="@layout/decrypt_content"/> diff --git a/OpenKeychain/src/main/res/layout-large/encrypt_activity.xml b/OpenKeychain/src/main/res/layout-large/encrypt_activity.xml index 7d0d44074..355580fad 100644 --- a/OpenKeychain/src/main/res/layout-large/encrypt_activity.xml +++ b/OpenKeychain/src/main/res/layout-large/encrypt_activity.xml @@ -4,7 +4,7 @@ android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> - <android.support.v4.widget.DrawerLayout + <android.support.v4.widget.FixedDrawerLayout xmlns:bootstrapbutton="http://schemas.android.com/apk/res-auto" xmlns:fontawesometext="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" @@ -13,7 +13,7 @@ <include layout="@layout/drawer_list"/> - </android.support.v4.widget.DrawerLayout> + </android.support.v4.widget.FixedDrawerLayout> <include layout="@layout/encrypt_content"/> </FrameLayout>
\ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout-large/key_list_activity.xml b/OpenKeychain/src/main/res/layout-large/key_list_activity.xml index 6636f12ff..6abbea13f 100644 --- a/OpenKeychain/src/main/res/layout-large/key_list_activity.xml +++ b/OpenKeychain/src/main/res/layout-large/key_list_activity.xml @@ -4,14 +4,14 @@ android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> - <android.support.v4.widget.DrawerLayout + <android.support.v4.widget.FixedDrawerLayout android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/drawer_list"/> - </android.support.v4.widget.DrawerLayout> + </android.support.v4.widget.FixedDrawerLayout> <include layout="@layout/key_list_content"/> diff --git a/OpenKeychain/src/main/res/layout/api_apps_list_activity.xml b/OpenKeychain/src/main/res/layout/api_apps_list_activity.xml index 9f95e9f3b..df187e0a5 100644 --- a/OpenKeychain/src/main/res/layout/api_apps_list_activity.xml +++ b/OpenKeychain/src/main/res/layout/api_apps_list_activity.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" +<android.support.v4.widget.FixedDrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" > @@ -8,4 +8,4 @@ <include layout="@layout/drawer_list" /> -</android.support.v4.widget.DrawerLayout>
\ No newline at end of file +</android.support.v4.widget.FixedDrawerLayout>
\ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/decrypt_activity.xml b/OpenKeychain/src/main/res/layout/decrypt_activity.xml index c4709a67e..94d82fe1d 100644 --- a/OpenKeychain/src/main/res/layout/decrypt_activity.xml +++ b/OpenKeychain/src/main/res/layout/decrypt_activity.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" +<android.support.v4.widget.FixedDrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:bootstrapbutton="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_parent" @@ -9,4 +9,4 @@ <include layout="@layout/drawer_list" /> -</android.support.v4.widget.DrawerLayout>
\ No newline at end of file +</android.support.v4.widget.FixedDrawerLayout>
\ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/encrypt_activity.xml b/OpenKeychain/src/main/res/layout/encrypt_activity.xml index 6484c9b7b..65c2ee8fd 100644 --- a/OpenKeychain/src/main/res/layout/encrypt_activity.xml +++ b/OpenKeychain/src/main/res/layout/encrypt_activity.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" +<android.support.v4.widget.FixedDrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:bootstrapbutton="http://schemas.android.com/apk/res-auto" xmlns:fontawesometext="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" @@ -10,4 +10,4 @@ <include layout="@layout/drawer_list" /> -</android.support.v4.widget.DrawerLayout>
\ No newline at end of file +</android.support.v4.widget.FixedDrawerLayout>
\ No newline at end of file diff --git a/OpenKeychain/src/main/res/layout/key_list_activity.xml b/OpenKeychain/src/main/res/layout/key_list_activity.xml index fcb376fa8..c4c2c35cb 100644 --- a/OpenKeychain/src/main/res/layout/key_list_activity.xml +++ b/OpenKeychain/src/main/res/layout/key_list_activity.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" +<android.support.v4.widget.FixedDrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" > @@ -8,4 +8,4 @@ <include layout="@layout/drawer_list" /> -</android.support.v4.widget.DrawerLayout>
\ No newline at end of file +</android.support.v4.widget.FixedDrawerLayout>
\ 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 71342eaec..330bc349d 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -499,5 +499,6 @@ <string name="secret_cannot_multiple">Secret keys can only be deleted individually!</string> <string name="title_view_cert">View Certificate Details</string> <string name="unknown_algorithm">unknown</string> + <string name="can_sign_not">cannot sign</string> </resources> |