Part 2 of basic user interface for api accounts

This commit is contained in:
Dominik Schürmann 2014-03-26 13:21:29 +01:00
parent 9542dc0e12
commit 92a4d0e914
4 changed files with 63 additions and 108 deletions

View File

@ -21,6 +21,7 @@ import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
@ -68,20 +69,20 @@ public class AccountSettingsActivity extends ActionBarActivity {
} }
} }
// @Override @Override
// public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
// super.onCreateOptionsMenu(menu); super.onCreateOptionsMenu(menu);
// getMenuInflater().inflate(R.menu.api_app_settings, menu); getMenuInflater().inflate(R.menu.api_account_settings, menu);
// return true; return true;
// } }
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.menu_api_settings_revoke: case R.id.menu_account_settings_delete:
deleteAccount(); deleteAccount();
return true; return true;
case R.id.menu_api_settings_cancel: case R.id.menu_account_settings_cancel:
finish(); finish();
return true; return true;
} }

View File

@ -17,6 +17,7 @@
package org.sufficientlysecure.keychain.remote.ui; package org.sufficientlysecure.keychain.remote.ui;
import android.content.Intent;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
@ -32,11 +33,14 @@ import android.widget.ImageView;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
import com.beardedhen.androidbootstrap.BootstrapButton;
import org.spongycastle.util.encoders.Hex; import org.spongycastle.util.encoders.Hex;
import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.remote.AccountSettings; import org.sufficientlysecure.keychain.remote.AccountSettings;
import org.sufficientlysecure.keychain.remote.AppSettings; import org.sufficientlysecure.keychain.remote.AppSettings;
import org.sufficientlysecure.keychain.ui.EditKeyActivity;
import org.sufficientlysecure.keychain.ui.SelectSecretKeyLayoutFragment; import org.sufficientlysecure.keychain.ui.SelectSecretKeyLayoutFragment;
import org.sufficientlysecure.keychain.ui.adapter.KeyValueSpinnerAdapter; import org.sufficientlysecure.keychain.ui.adapter.KeyValueSpinnerAdapter;
import org.sufficientlysecure.keychain.util.AlgorithmNames; import org.sufficientlysecure.keychain.util.AlgorithmNames;
@ -52,15 +56,13 @@ public class AccountSettingsFragment extends Fragment implements
private AccountSettings mAccSettings; private AccountSettings mAccSettings;
// view // view
private TextView mAppNameView; private TextView mAccNameView;
private ImageView mAppIconView;
private Spinner mEncryptionAlgorithm; private Spinner mEncryptionAlgorithm;
private Spinner mHashAlgorithm; private Spinner mHashAlgorithm;
private Spinner mCompression; private Spinner mCompression;
private TextView mPackageName;
private TextView mPackageSignature;
private SelectSecretKeyLayoutFragment mSelectKeyFragment; private SelectSecretKeyLayoutFragment mSelectKeyFragment;
private BootstrapButton mCreateKeyButton;
KeyValueSpinnerAdapter mEncryptionAdapter; KeyValueSpinnerAdapter mEncryptionAdapter;
KeyValueSpinnerAdapter mHashAdapter; KeyValueSpinnerAdapter mHashAdapter;
@ -70,27 +72,15 @@ public class AccountSettingsFragment extends Fragment implements
return mAccSettings; return mAccSettings;
} }
public void setAccSettings(AccountSettings appSettings) { public void setAccSettings(AccountSettings accountSettings) {
this.mAccSettings = appSettings; this.mAccSettings = accountSettings;
// setPackage(appSettings.getPackageName());
// mPackageName.setText(appSettings.getPackageName());
// try { mAccNameView.setText(accountSettings.getAccountName());
// MessageDigest md = MessageDigest.getInstance("SHA-256"); mSelectKeyFragment.selectKey(accountSettings.getKeyId());
// md.update(appSettings.getPackageSignature()); mEncryptionAlgorithm.setSelection(mEncryptionAdapter.getPosition(accountSettings
// byte[] digest = md.digest();
// String signature = new String(Hex.encode(digest));
//
// mPackageSignature.setText(signature);
// } catch (NoSuchAlgorithmException e) {
// Log.e(Constants.TAG, "Should not happen!", e);
// }
mSelectKeyFragment.selectKey(appSettings.getKeyId());
mEncryptionAlgorithm.setSelection(mEncryptionAdapter.getPosition(appSettings
.getEncryptionAlgorithm())); .getEncryptionAlgorithm()));
mHashAlgorithm.setSelection(mHashAdapter.getPosition(appSettings.getHashAlgorithm())); mHashAlgorithm.setSelection(mHashAdapter.getPosition(accountSettings.getHashAlgorithm()));
mCompression.setSelection(mCompressionAdapter.getPosition(appSettings.getCompression())); mCompression.setSelection(mCompressionAdapter.getPosition(accountSettings.getCompression()));
} }
/** /**
@ -117,14 +107,19 @@ public class AccountSettingsFragment extends Fragment implements
R.id.api_account_settings_select_key_fragment); R.id.api_account_settings_select_key_fragment);
mSelectKeyFragment.setCallback(this); mSelectKeyFragment.setCallback(this);
mAppNameView = (TextView) view.findViewById(R.id.api_account_settings_app_name); mAccNameView = (TextView) view.findViewById(R.id.api_account_settings_acc_name);
mAppIconView = (ImageView) view.findViewById(R.id.api_account_settings_app_icon);
mEncryptionAlgorithm = (Spinner) view mEncryptionAlgorithm = (Spinner) view
.findViewById(R.id.api_account_settings_encryption_algorithm); .findViewById(R.id.api_account_settings_encryption_algorithm);
mHashAlgorithm = (Spinner) view.findViewById(R.id.api_account_settings_hash_algorithm); mHashAlgorithm = (Spinner) view.findViewById(R.id.api_account_settings_hash_algorithm);
mCompression = (Spinner) view.findViewById(R.id.api_account_settings_compression); mCompression = (Spinner) view.findViewById(R.id.api_account_settings_compression);
mPackageName = (TextView) view.findViewById(R.id.api_account_settings_package_name); mCreateKeyButton = (BootstrapButton) view.findViewById(R.id.api_account_settings_create_key);
mPackageSignature = (TextView) view.findViewById(R.id.api_account_settings_package_signature);
mCreateKeyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
createKey();
}
});
AlgorithmNames algorithmNames = new AlgorithmNames(getActivity()); AlgorithmNames algorithmNames = new AlgorithmNames(getActivity());
@ -172,25 +167,15 @@ public class AccountSettingsFragment extends Fragment implements
} }
}); });
} }
//
// private void setPackage(String packageName) { private void createKey() {
// PackageManager pm = getActivity().getApplicationContext().getPackageManager(); Intent intent = new Intent(getActivity(), EditKeyActivity.class);
// intent.setAction(EditKeyActivity.ACTION_CREATE_KEY);
// // get application name and icon from package manager intent.putExtra(EditKeyActivity.EXTRA_GENERATE_DEFAULT_KEYS, true);
// String appName = null; // set default user id to account name TODO: not working currently in EditKey
// Drawable appIcon = null; intent.putExtra(EditKeyActivity.EXTRA_USER_IDS, mAccSettings.getAccountName());
// try { startActivityForResult(intent, 0);
// ApplicationInfo ai = pm.getApplicationInfo(packageName, 0); }
//
// appName = (String) pm.getApplicationLabel(ai);
// appIcon = pm.getApplicationIcon(ai);
// } catch (final NameNotFoundException e) {
// // fallback
// appName = packageName;
// }
// mAppNameView.setText(appName);
// mAppIconView.setImageDrawable(appIcon);
// }
/** /**
* callback from select secret key fragment * callback from select secret key fragment

View File

@ -7,34 +7,14 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<RelativeLayout <TextView
android:layout_width="match_parent" android:id="@+id/api_account_settings_acc_name"
android:layout_height="?android:attr/listPreferredItemHeight" android:layout_width="wrap_content"
android:layout_marginBottom="4dp" android:layout_height="wrap_content"
android:layout_marginTop="4dp" android:gravity="center_vertical"
android:gravity="center_horizontal" android:orientation="vertical"
android:orientation="horizontal"> android:text="Name (set in-code)"
android:textAppearance="?android:attr/textAppearanceMedium" />
<ImageView
android:id="@+id/api_account_settings_app_icon"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_alignParentBottom="true"
android:layout_alignParentTop="true"
android:layout_marginRight="6dp"
android:src="@drawable/icon" />
<TextView
android:id="@+id/api_account_settings_app_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/api_app_settings_app_icon"
android:gravity="center_vertical"
android:orientation="vertical"
android:text="Name (set in-code)"
android:textAppearance="?android:attr/textAppearanceMedium" />
</RelativeLayout>
<fragment <fragment
android:id="@+id/api_account_settings_select_key_fragment" android:id="@+id/api_account_settings_select_key_fragment"
@ -43,6 +23,19 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:layout="@layout/select_secret_key_layout_fragment" /> tools:layout="@layout/select_secret_key_layout_fragment" />
<com.beardedhen.androidbootstrap.BootstrapButton
android:id="@+id/api_account_settings_create_key"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginBottom="4dp"
android:layout_marginRight="4dp"
android:layout_marginTop="4dp"
android:text="@string/api_settings_create_key"
bootstrapbutton:bb_icon_left="fa-key"
bootstrapbutton:bb_size="default"
bootstrapbutton:bb_type="default" />
<org.sufficientlysecure.keychain.ui.widget.FoldableLinearLayout <org.sufficientlysecure.keychain.ui.widget.FoldableLinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
@ -84,32 +77,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/api_settings_package_name"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/api_account_settings_package_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="com.example"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/api_settings_package_signature"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/api_account_settings_package_signature"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Base64 encoded signature"
android:textAppearance="?android:attr/textAppearanceSmall" />
</org.sufficientlysecure.keychain.ui.widget.FoldableLinearLayout> </org.sufficientlysecure.keychain.ui.widget.FoldableLinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -418,9 +418,11 @@
<string name="api_settings_hide_advanced">Hide advanced settings</string> <string name="api_settings_hide_advanced">Hide advanced settings</string>
<string name="api_settings_no_key">No key selected</string> <string name="api_settings_no_key">No key selected</string>
<string name="api_settings_select_key">Select key</string> <string name="api_settings_select_key">Select key</string>
<string name="api_settings_create_key">Create new key for this account</string>
<string name="api_settings_save">Save</string> <string name="api_settings_save">Save</string>
<string name="api_settings_cancel">Cancel</string> <string name="api_settings_cancel">Cancel</string>
<string name="api_settings_revoke">Revoke access</string> <string name="api_settings_revoke">Revoke access</string>
<string name="api_settings_delete_account">Delete account</string>
<string name="api_settings_package_name">Package Name</string> <string name="api_settings_package_name">Package Name</string>
<string name="api_settings_package_signature">SHA-256 of Package Signature</string> <string name="api_settings_package_signature">SHA-256 of Package Signature</string>
<string name="api_settings_accounts">Accounts</string> <string name="api_settings_accounts">Accounts</string>