From 28af02c6c77c854490ea197ad053ef259d4d2d50 Mon Sep 17 00:00:00 2001 From: Andrea Torlaschi Date: Tue, 16 Aug 2016 23:32:48 +0200 Subject: [PATCH] ImportKeys: Add basic key importing --- .../keychain/ui/ImportKeysActivity.java | 1 + .../keychain/ui/ImportKeysListFragment.java | 62 +++++++++++++++++-- .../ui/adapter/ImportKeysAdapter.java | 16 ++++- .../res/layout/import_keys_list_fragment.xml | 62 +++++++++++++++---- .../main/res/layout/import_keys_list_item.xml | 38 ++++++++---- .../res/menu/import_keys_list_fragment.xml | 12 ++++ OpenKeychain/src/main/res/values/strings.xml | 1 + 7 files changed, 159 insertions(+), 33 deletions(-) create mode 100644 OpenKeychain/src/main/res/menu/import_keys_list_fragment.xml diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java index 5546a27fa..d8f5c7d27 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java @@ -268,6 +268,7 @@ public class ImportKeysActivity extends BaseActivity implements ImportKeysListen */ private void startListFragment(byte[] bytes, Uri dataUri, String serverQuery, Preferences.CloudSearchPrefs cloudSearchPrefs) { + Fragment listFragment = ImportKeysListFragment.newInstance(bytes, dataUri, serverQuery, false, cloudSearchPrefs); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java index d6ceebe13..94f01fa79 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java @@ -32,8 +32,12 @@ import android.support.v4.util.LongSparseArray; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.TextView; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; @@ -55,6 +59,7 @@ import org.sufficientlysecure.keychain.util.IteratorWithSize; import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.Preferences; +import org.sufficientlysecure.keychain.util.Preferences.CloudSearchPrefs; import org.sufficientlysecure.keychain.util.orbot.OrbotHelper; import java.util.ArrayList; @@ -78,6 +83,7 @@ public class ImportKeysListFragment extends Fragment implements private RecyclerView mRecyclerView; private ImportKeysAdapter mAdapter; + private boolean mAdvanced; private LoaderState mLoaderState; @@ -148,7 +154,8 @@ public class ImportKeysListFragment extends Fragment implements * @return fragment with arguments set based on passed parameters */ public static ImportKeysListFragment newInstance(byte[] bytes, Uri dataUri, String serverQuery, - Preferences.CloudSearchPrefs cloudSearchPrefs) { + CloudSearchPrefs cloudSearchPrefs) { + return newInstance(bytes, dataUri, serverQuery, false, cloudSearchPrefs); } @@ -168,8 +175,7 @@ public class ImportKeysListFragment extends Fragment implements Uri dataUri, String serverQuery, boolean nonInteractive, - Preferences.CloudSearchPrefs cloudSearchPrefs) { - ImportKeysListFragment frag = new ImportKeysListFragment(); + CloudSearchPrefs cloudSearchPrefs) { Bundle args = new Bundle(); args.putByteArray(ARG_BYTES, bytes); @@ -178,13 +184,13 @@ public class ImportKeysListFragment extends Fragment implements args.putBoolean(ARG_NON_INTERACTIVE, nonInteractive); args.putParcelable(ARG_CLOUD_SEARCH_PREFS, cloudSearchPrefs); + ImportKeysListFragment frag = new ImportKeysListFragment(); frag.setArguments(args); - return frag; } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) { binding = DataBindingUtil.inflate(inflater, R.layout.import_keys_list_fragment, container, false); binding.setStatus(STATUS_FIRST); View view = binding.getRoot(); @@ -208,7 +214,7 @@ public class ImportKeysListFragment extends Fragment implements if (dataUri != null || bytes != null) { mLoaderState = new BytesLoaderState(bytes, dataUri); } else if (query != null) { - Preferences.CloudSearchPrefs cloudSearchPrefs + CloudSearchPrefs cloudSearchPrefs = args.getParcelable(ARG_CLOUD_SEARCH_PREFS); if (cloudSearchPrefs == null) { cloudSearchPrefs = Preferences.getPreferences(mActivity).getCloudSearchPrefs(); @@ -221,6 +227,16 @@ public class ImportKeysListFragment extends Fragment implements restartLoaders(); } + setHasOptionsMenu(true); + + TextView importAllKeys = (TextView) view.findViewById(R.id.import_keys); + importAllKeys.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + mCallback.importKeys(); + } + }); + return view; } @@ -236,6 +252,38 @@ public class ImportKeysListFragment extends Fragment implements } } + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.import_keys_list_fragment, menu); + + menu.findItem(R.id.basic).setVisible(mAdvanced); + menu.findItem(R.id.advanced).setVisible(!mAdvanced); + + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.basic: + mAdvanced = false; + mAdapter.setAdvanced(false); + mActivity.invalidateOptionsMenu(); + + binding.setAdvanced(mAdvanced); + return true; + case R.id.advanced: + mAdvanced = true; + mAdapter.setAdvanced(true); + mActivity.invalidateOptionsMenu(); + + binding.setAdvanced(mAdvanced); + return true; + } + + return false; + } + @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @@ -263,6 +311,8 @@ public class ImportKeysListFragment extends Fragment implements !PermissionsUtil.checkAndRequestReadPermission(mActivity, ls.mDataUri)) { return; } + } else if (mLoaderState instanceof CloudLoaderState) { + } restartLoaders(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysAdapter.java index 5b0c50fb4..ce014afe0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysAdapter.java @@ -52,7 +52,7 @@ public class ImportKeysAdapter extends RecyclerView.Adapter mData; @@ -60,14 +60,22 @@ public class ImportKeysAdapter extends RecyclerView.Adapter data) { @@ -128,6 +136,8 @@ public class ImportKeysAdapter extends RecyclerView.Adapter - + @@ -9,12 +11,11 @@ alias="i" type="org.sufficientlysecure.keychain.ui.ImportKeysListFragment" /> - + + - @@ -22,23 +23,60 @@ + + - - + android:layout_alignParentBottom="true" + android:background="?attr/colorPrimary" + android:elevation="4dp" + android:minHeight="?attr/actionBarSize" + android:paddingLeft="8dp" + android:paddingRight="8dp" + android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" + android:visibility="@{!advanced && (status == i.STATUS_LOADED) ? View.VISIBLE : View.GONE}" + app:popupTheme="@style/ThemeOverlay.AppCompat.Light" + tools:ignore="UnusedAttribute"> + + + + + + + + + + + diff --git a/OpenKeychain/src/main/res/layout/import_keys_list_item.xml b/OpenKeychain/src/main/res/layout/import_keys_list_item.xml index f880abfdb..f4d6ff57c 100644 --- a/OpenKeychain/src/main/res/layout/import_keys_list_item.xml +++ b/OpenKeychain/src/main/res/layout/import_keys_list_item.xml @@ -5,6 +5,7 @@ + @@ -76,11 +77,17 @@ + + + android:visibility="@{(!advanced || nonInteractive) ? View.GONE : View.VISIBLE}">