This commit is contained in:
Dominik Schürmann
2014-10-05 10:59:52 +02:00
parent 0b9308753d
commit 2768671206
16 changed files with 205 additions and 79 deletions

View File

@@ -80,7 +80,7 @@
<activity
android:name=".ui.KeyListActivity"
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
android:label="@string/app_name"
android:label="@string/nav_keys"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

View File

@@ -73,7 +73,6 @@ public class AddKeysActivity extends ActionBarActivity implements
ImageView mActionSafeSlingerIcon;
View mActionQrCode;
View mActionNfc;
View mActionSearchCloud;
ProviderHelper mProviderHelper;
@@ -103,7 +102,6 @@ public class AddKeysActivity extends ActionBarActivity implements
PorterDuff.Mode.SRC_IN);
mActionQrCode = findViewById(R.id.add_keys_qr_code);
mActionNfc = findViewById(R.id.add_keys_nfc);
mActionSearchCloud = findViewById(R.id.add_keys_search_cloud);
mSafeSlingerKeySpinner.setOnKeyChangedListener(new KeySpinner.OnKeyChangedListener() {
@Override
@@ -135,14 +133,6 @@ public class AddKeysActivity extends ActionBarActivity implements
startActivityForResult(intent, REQUEST_CODE_RESULT);
}
});
mActionSearchCloud.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchCloud();
}
});
}
private void startExchange() {
@@ -171,12 +161,6 @@ public class AddKeysActivity extends ActionBarActivity implements
new IntentIntegrator(this).initiateScan();
}
private void searchCloud() {
finish();
Intent importIntent = new Intent(this, ImportKeysActivity.class);
startActivity(importIntent);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {

View File

@@ -150,12 +150,13 @@ public class ImportKeysActivity extends ActionBarActivity {
}
Bundle serverBundle = null;
int showTabOnly = ALL_TABS;
int showTabOnly = TAB_CLOUD;
if (ACTION_IMPORT_KEY.equals(action)) {
/* Keychain's own Actions */
// display file fragment
mViewPager.setCurrentItem(TAB_FILE);
showTabOnly = TAB_FILE;
mSwitchToTab = TAB_FILE;
if (dataUri != null) {
// action: directly load data
@@ -229,6 +230,7 @@ public class ImportKeysActivity extends ActionBarActivity {
}
} else if (ACTION_IMPORT_KEY_FROM_FILE.equals(action)) {
// NOTE: this only displays the appropriate fragment, no actions are taken
showTabOnly = TAB_FILE;
mSwitchToTab = TAB_FILE;
// no immediate actions!
@@ -243,14 +245,14 @@ public class ImportKeysActivity extends ActionBarActivity {
startListFragment(savedInstanceState, null, null, null);
} else if (ACTION_IMPORT_KEY_FROM_QR_CODE.equals(action)) {
// also exposed in AndroidManifest
showTabOnly = ALL_TABS;
// NOTE: this only displays the appropriate fragment, no actions are taken
mSwitchToTab = TAB_QR_CODE;
// no immediate actions!
startListFragment(savedInstanceState, null, null, null);
} else if (ACTION_IMPORT_KEY_FROM_NFC.equals(action)) {
showTabOnly = ALL_TABS;
// NOTE: this only displays the appropriate fragment, no actions are taken
mSwitchToTab = TAB_QR_CODE;
@@ -334,32 +336,36 @@ public class ImportKeysActivity extends ActionBarActivity {
getSupportFragmentManager().executePendingTransactions();
}
private String getFingerprintFromUri(Uri dataUri) {
public static String getFingerprintFromUri(Uri dataUri) {
String fingerprint = dataUri.toString().split(":")[1].toLowerCase(Locale.ENGLISH);
Log.d(Constants.TAG, "fingerprint: " + fingerprint);
return fingerprint;
}
public void loadFromFingerprintUri(Uri dataUri) {
String query = "0x" + getFingerprintFromUri(dataUri);
public void loadFromFingerprint(String fingerprint) {
// String fingerprint = "0x" + getFingerprintFromUri(dataUri);
// setCurrentItem does not work directly after onResume (from qr code scanner)
// see http://stackoverflow.com/q/19316729
// so, reset adapter completely!
if (mViewPager.getAdapter() != null)
mViewPager.setAdapter(null);
mViewPager.setAdapter(mTabsAdapter);
mViewPager.setCurrentItem(TAB_CLOUD);
// if (mViewPager.getAdapter() != null)
// mViewPager.setAdapter(null);
// mViewPager.setAdapter(mTabsAdapter);
// mViewPager.setCurrentItem(TAB_CLOUD);
ImportKeysCloudFragment f = (ImportKeysCloudFragment)
getActiveFragment(mViewPager, TAB_CLOUD);
// ImportKeysCloudFragment f = (ImportKeysCloudFragment)
// getActiveFragment(mViewPager, TAB_CLOUD);
// search config
Preferences prefs = Preferences.getPreferences(ImportKeysActivity.this);
Preferences.CloudSearchPrefs cloudPrefs = new Preferences.CloudSearchPrefs(true, true, prefs.getPreferredKeyserver());
Intent searchIntent = new Intent(this, ImportKeysActivity.class);
searchIntent.putExtra(ImportKeysActivity.EXTRA_FINGERPRINT, fingerprint);
startActivity(searchIntent);
// search directly
loadCallback(new ImportKeysListFragment.CloudLoaderState(query, cloudPrefs));
// // search config
// Preferences prefs = Preferences.getPreferences(ImportKeysActivity.this);
// Preferences.CloudSearchPrefs cloudPrefs = new Preferences.CloudSearchPrefs(true, true, prefs.getPreferredKeyserver());
//
// // search directly
// loadCallback(new ImportKeysListFragment.CloudLoaderState(query, cloudPrefs));
}
// http://stackoverflow.com/a/9293207

View File

@@ -31,8 +31,6 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.compatibility.ClipboardReflection;
import org.sufficientlysecure.keychain.util.FileHelper;
import java.util.Locale;
public class ImportKeysFileFragment extends Fragment {
private ImportKeysActivity mImportActivity;
private View mBrowse;
@@ -80,12 +78,8 @@ public class ImportKeysFileFragment extends Fragment {
String sendText = "";
if (clipboardText != null) {
sendText = clipboardText.toString();
if (sendText.toLowerCase(Locale.ENGLISH).startsWith(Constants.FINGERPRINT_SCHEME)) {
mImportActivity.loadFromFingerprintUri(Uri.parse(sendText));
return;
}
mImportActivity.loadCallback(new ImportKeysListFragment.BytesLoaderState(sendText.getBytes(), null));
}
mImportActivity.loadCallback(new ImportKeysListFragment.BytesLoaderState(sendText.getBytes(), null));
}
});

View File

@@ -132,7 +132,7 @@ public class ImportKeysQrCodeFragment extends Fragment {
}
public void importFingerprint(Uri dataUri) {
mImportActivity.loadFromFingerprintUri(dataUri);
mImportActivity.loadFromFingerprint(ImportKeysActivity.getFingerprintFromUri(dataUri));
}
}

View File

@@ -87,6 +87,10 @@ public class KeyListActivity extends DrawerActivity {
addKeys();
return true;
case R.id.menu_key_list_search_cloud:
searchCloud();
return true;
case R.id.menu_key_list_create:
createKey();
return true;
@@ -144,6 +148,12 @@ public class KeyListActivity extends DrawerActivity {
startActivityForResult(intent, 0);
}
private void searchCloud() {
Intent importIntent = new Intent(this, ImportKeysActivity.class);
importIntent.putExtra(ImportKeysActivity.EXTRA_QUERY, (String) null); // hack to show only cloud tab
startActivity(importIntent);
}
private void createKey() {
Intent intent = new Intent(this, CreateKeyActivity.class);
startActivityForResult(intent, 0);

View File

@@ -470,6 +470,11 @@ public class KeyListFragment extends LoaderFragment
MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
hideMenu = true;
getActivity().invalidateOptionsMenu();
}
// disable swipe-to-refresh
// mSwipeRefreshLayout.setIsLocked(true);
return true;
@@ -479,6 +484,11 @@ public class KeyListFragment extends LoaderFragment
public boolean onMenuItemActionCollapse(MenuItem item) {
mQuery = null;
getLoaderManager().restartLoader(0, null, KeyListFragment.this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
hideMenu = false;
getActivity().invalidateOptionsMenu();
}
// enable swipe-to-refresh
// mSwipeRefreshLayout.setIsLocked(false);
return true;

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 913 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -135,34 +135,6 @@
android:background="?android:attr/listDivider"
android:layout_marginBottom="8dp" />
<TextView
style="@style/SectionHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="@string/add_keys_section_import" />
<TextView
android:id="@+id/add_keys_search_cloud"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:clickable="true"
style="@style/SelectableItem"
android:text="@string/add_keys_cloud"
android:drawableRight="@drawable/ic_action_search"
android:drawablePadding="8dp"
android:gravity="center_vertical" />
<View
android:layout_width="match_parent"
android:layout_height="1dip"
android:background="?android:attr/listDivider"
android:layout_marginBottom="8dp" />
</LinearLayout>
</LinearLayout>
</ScrollView>

View File

@@ -7,18 +7,23 @@
android:title="@string/menu_search"
android:icon="@drawable/ic_action_search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="collapseActionView|ifRoom" />
app:showAsAction="collapseActionView|always" />
<item
android:id="@+id/menu_key_list_search_cloud"
app:showAsAction="always|withText"
android:icon="@drawable/ic_action_search_cloud"
android:title="@string/menu_add_keys" />
<item
android:id="@+id/menu_key_list_add"
app:showAsAction="ifRoom|withText"
app:showAsAction="always|withText"
android:icon="@drawable/ic_action_new_account"
android:title="@string/menu_add_keys" />
<item
android:id="@+id/menu_key_list_export"
app:showAsAction="ifRoom|withText"
android:icon="@drawable/ic_action_import_export"
app:showAsAction="never"
android:title="@string/menu_export_all_keys" />
<item

View File

@@ -277,13 +277,10 @@
<!-- Add keys -->
<string name="add_keys_section_secure_exchange">"Secure Exchange"</string>
<string name="add_keys_section_secure_add">"Secure Add"</string>
<string name="add_keys_section_import">"Import (untrusted)"</string>
<string name="add_keys_my_key">"My key:"</string>
<string name="add_keys_start_exchange">"Start exchange"</string>
<string name="add_keys_qr_code">"Scan QR Code"</string>
<string name="add_keys_nfc">"Receive via NFC"</string>
<string name="add_keys_cloud">"Search cloud"</string>
<!-- progress dialogs, usually ending in '…' -->
<string name="progress_done">"Done."</string>