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

View File

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

View File

@ -7,34 +7,14 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:layout_marginBottom="4dp"
android:layout_marginTop="4dp"
android:gravity="center_horizontal"
android:orientation="horizontal">
<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>
<TextView
android:id="@+id/api_account_settings_acc_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="vertical"
android:text="Name (set in-code)"
android:textAppearance="?android:attr/textAppearanceMedium" />
<fragment
android:id="@+id/api_account_settings_select_key_fragment"
@ -43,6 +23,19 @@
android:layout_height="wrap_content"
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
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -84,32 +77,6 @@
android:layout_width="match_parent"
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>
</LinearLayout>

View File

@ -418,9 +418,11 @@
<string name="api_settings_hide_advanced">Hide advanced settings</string>
<string name="api_settings_no_key">No key selected</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_cancel">Cancel</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_signature">SHA-256 of Package Signature</string>
<string name="api_settings_accounts">Accounts</string>