diff options
Diffstat (limited to 'OpenKeychain/src/main')
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> | 
