Files
open-keychain/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/remote_api/AppSettingsActivity.java

147 lines
5.0 KiB
Java
Raw Normal View History

package org.sufficientlysecure.keychain.remote_api;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
2013-09-04 23:47:40 +02:00
import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.util.Log;
2013-09-05 00:02:48 +02:00
import android.content.ContentValues;
import android.content.Intent;
2013-09-04 23:47:40 +02:00
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
2013-09-05 21:25:49 +02:00
import android.view.LayoutInflater;
2013-09-05 00:02:48 +02:00
import android.view.View;
2013-09-04 23:47:40 +02:00
import android.widget.Button;
import android.widget.TextView;
2013-09-05 21:25:49 +02:00
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
2013-09-05 21:25:49 +02:00
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
public class AppSettingsActivity extends SherlockFragmentActivity {
2013-09-05 00:02:48 +02:00
// model
2013-09-06 08:29:56 +02:00
Uri mAppUri;
String mPackageName;
2013-09-04 23:47:40 +02:00
// view
2013-09-05 00:02:48 +02:00
Button saveButton;
Button revokeButton;
2013-09-04 23:47:40 +02:00
2013-09-06 09:44:56 +02:00
AppSettingsFragment settingsFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
2013-09-06 09:44:56 +02:00
// pm = getApplicationContext().getPackageManager();
2013-09-04 23:47:40 +02:00
2013-09-05 21:25:49 +02:00
// BEGIN_INCLUDE (inflate_set_custom_view)
// Inflate a "Done" custom action bar view to serve as the "Up" affordance.
final LayoutInflater inflater = (LayoutInflater) getSupportActionBar().getThemedContext()
.getSystemService(LAYOUT_INFLATER_SERVICE);
final View customActionBarView = inflater
.inflate(R.layout.actionbar_custom_view_done, null);
((TextView) customActionBarView.findViewById(R.id.actionbar_done_text))
.setText(R.string.api_settings_save);
customActionBarView.findViewById(R.id.actionbar_done).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
// "Done"
save();
}
});
// Show the custom action bar view and hide the normal Home icon and title.
final ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM
| ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE);
actionBar.setCustomView(customActionBarView);
// END_INCLUDE (inflate_set_custom_view)
setContentView(R.layout.api_app_settings_activity);
2013-09-06 09:44:56 +02:00
settingsFragment = (AppSettingsFragment) getSupportFragmentManager().findFragmentById(
R.id.api_app_settings_fragment);
2013-09-06 08:29:56 +02:00
Intent intent = getIntent();
2013-09-06 08:29:56 +02:00
mAppUri = intent.getData();
if (mAppUri == null) {
Log.e(Constants.TAG, "Intent data missing. Should be Uri of app!");
finish();
return;
2013-09-04 23:47:40 +02:00
} else {
2013-09-06 08:29:56 +02:00
Log.d(Constants.TAG, "uri: " + mAppUri);
loadData(mAppUri);
2013-09-04 23:47:40 +02:00
}
}
2013-09-05 21:25:49 +02:00
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getSupportMenuInflater().inflate(R.menu.api_app_settings, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_api_settings_revoke:
revokeAccess();
return true;
case R.id.menu_api_settings_cancel:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
2013-09-04 23:47:40 +02:00
private void loadData(Uri appUri) {
Cursor cur = getContentResolver().query(appUri, null, null, null, null);
if (cur.moveToFirst()) {
2013-09-06 08:29:56 +02:00
mPackageName = cur.getString(cur.getColumnIndex(KeychainContract.ApiApps.PACKAGE_NAME));
2013-09-06 09:44:56 +02:00
settingsFragment.setPackage(mPackageName);
2013-09-05 00:27:17 +02:00
try {
2013-09-06 09:44:56 +02:00
long secretKeyId = (cur.getLong(cur
2013-09-06 08:29:56 +02:00
.getColumnIndexOrThrow(KeychainContract.ApiApps.KEY_ID)));
2013-09-06 09:44:56 +02:00
Log.d(Constants.TAG, "mSecretKeyId: " + secretKeyId);
settingsFragment.setSecretKey(secretKeyId);
2013-09-06 08:29:56 +02:00
2013-09-05 00:27:17 +02:00
boolean asciiArmor = (cur.getInt(cur
.getColumnIndexOrThrow(KeychainContract.ApiApps.ASCII_ARMOR)) == 1);
2013-09-06 09:44:56 +02:00
settingsFragment.setAsciiArmor(asciiArmor);
2013-09-05 00:27:17 +02:00
} catch (IllegalArgumentException e) {
Log.e(Constants.TAG, "AppSettingsActivity", e);
}
}
2013-09-05 00:02:48 +02:00
}
private void revokeAccess() {
2013-09-06 08:29:56 +02:00
if (getContentResolver().delete(mAppUri, null, null) <= 0) {
2013-09-05 00:27:17 +02:00
throw new RuntimeException();
}
2013-09-05 00:02:48 +02:00
finish();
}
private void save() {
final ContentValues cv = new ContentValues();
2013-09-06 09:44:56 +02:00
cv.put(KeychainContract.ApiApps.KEY_ID, settingsFragment.getSecretKeyId());
2013-09-06 08:29:56 +02:00
2013-09-06 09:44:56 +02:00
cv.put(KeychainContract.ApiApps.ASCII_ARMOR, settingsFragment.isAsciiArmor());
2013-09-05 00:27:17 +02:00
// TODO: other parameters
2013-09-06 08:29:56 +02:00
if (getContentResolver().update(mAppUri, cv, null, null) <= 0) {
2013-09-05 00:27:17 +02:00
throw new RuntimeException();
}
2013-09-05 00:02:48 +02:00
finish();
}
}