Include DoneBar for edit activities

This commit is contained in:
Dominik Schürmann 2013-09-05 21:25:49 +02:00
parent 8614ff2ec7
commit 00d03d452e
14 changed files with 194 additions and 46 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,27 @@
<!--
Copyright 2013 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@drawable/abs__list_divider_holo_light"
android:dividerPadding="12dp"
android:orientation="horizontal"
android:showDividers="end" >
<include layout="@layout/actionbar_include_done_button" />
</LinearLayout>

View File

@ -0,0 +1,29 @@
<!--
Copyright 2013 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@drawable/abs__list_divider_holo_light"
android:dividerPadding="12dp"
android:orientation="horizontal"
android:showDividers="middle" >
<include layout="@layout/actionbar_include_cancel_button" />
<include layout="@layout/actionbar_include_done_button" />
</LinearLayout>

View File

@ -0,0 +1,36 @@
<!--
Copyright 2013 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/actionbar_cancel"
style="@style/Widget.Sherlock.ActionButton"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" >
<TextView
android:id="@+id/actionbar_cancel_text"
style="@style/Widget.Sherlock.ActionBar.TabText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:drawableLeft="@drawable/ic_action_cancel"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:paddingRight="20dp"
android:text="Cancel (set in-code!)" />
</FrameLayout>

View File

@ -0,0 +1,36 @@
<!--
Copyright 2013 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/actionbar_done"
style="@style/Widget.Sherlock.ActionButton"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" >
<TextView
android:id="@+id/actionbar_done_text"
style="@style/Widget.Sherlock.ActionBar.TabText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:drawableLeft="@drawable/ic_action_done"
android:drawablePadding="8dp"
android:gravity="center_vertical"
android:paddingRight="20dp"
android:text="Save (set in-code!)" />
</FrameLayout>

View File

@ -1,10 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:padding="8dp"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent" >
android:orientation="vertical" >
<fragment <fragment
android:id="@+id/api_app_settings_fragment" android:id="@+id/api_app_settings_fragment"
@ -13,25 +11,4 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:layout="@layout/api_app_settings_fragment" /> tools:layout="@layout/api_app_settings_fragment" />
<LinearLayout </RelativeLayout>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="3dip" >
<Button
android:id="@+id/api_app_settings_revoke"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/api_settings_revoke" />
<Button
android:id="@+id/api_app_settings_save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/api_settings_save" />
</LinearLayout>
</LinearLayout>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_api_settings_revoke"
android:showAsAction="never"
android:title="@string/api_settings_revoke"/>
<item
android:id="@+id/menu_api_settings_cancel"
android:showAsAction="never"
android:title="@string/api_settings_cancel"/>
</menu>

View File

@ -368,6 +368,7 @@
<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_save">Save</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_revoke">Revoke access</string>
<string name="api_register_text">%1$s (%2$s) requests access to OpenPGP Keychain\'s API.\n\nAllow permanent access?</string> <string name="api_register_text">%1$s (%2$s) requests access to OpenPGP Keychain\'s API.\n\nAllow permanent access?</string>
<string name="api_register_allow">Allow access</string> <string name="api_register_allow">Allow access</string>

View File

@ -5,7 +5,6 @@ import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import android.content.ContentUris;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
@ -14,13 +13,16 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; import android.widget.Button;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.TextView; import android.widget.TextView;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
public class AppSettingsActivity extends SherlockFragmentActivity { public class AppSettingsActivity extends SherlockFragmentActivity {
private PackageManager pm; private PackageManager pm;
@ -46,28 +48,36 @@ public class AppSettingsActivity extends SherlockFragmentActivity {
pm = getApplicationContext().getPackageManager(); pm = getApplicationContext().getPackageManager();
// 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); setContentView(R.layout.api_app_settings_activity);
selectedKey = (TextView) findViewById(R.id.api_app_settings_selected_key); selectedKey = (TextView) findViewById(R.id.api_app_settings_selected_key);
selectKeyButton = (Button) findViewById(R.id.api_app_settings_select_key_button); selectKeyButton = (Button) findViewById(R.id.api_app_settings_select_key_button);
asciiArmorCheckBox = (CheckBox) findViewById(R.id.api_app_ascii_armor); asciiArmorCheckBox = (CheckBox) findViewById(R.id.api_app_ascii_armor);
revokeButton = (Button) findViewById(R.id.api_app_settings_revoke);
saveButton = (Button) findViewById(R.id.api_app_settings_save);
revokeButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
revokeAccess();
}
});
saveButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
save();
}
});
Intent intent = getIntent(); Intent intent = getIntent();
appUri = intent.getData(); appUri = intent.getData();
@ -81,6 +91,26 @@ public class AppSettingsActivity extends SherlockFragmentActivity {
} }
} }
@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);
}
private void loadData(Uri appUri) { private void loadData(Uri appUri) {
Cursor cur = getContentResolver().query(appUri, null, null, null, null); Cursor cur = getContentResolver().query(appUri, null, null, null, null);
if (cur.moveToFirst()) { if (cur.moveToFirst()) {
@ -114,7 +144,6 @@ public class AppSettingsActivity extends SherlockFragmentActivity {
} }
private void save() { private void save() {
Log.d(Constants.TAG, "saving");
final ContentValues cv = new ContentValues(); final ContentValues cv = new ContentValues();
// cv.put(KeychainContract.ApiApps.PACKAGE_NAME, packageName); // cv.put(KeychainContract.ApiApps.PACKAGE_NAME, packageName);
cv.put(KeychainContract.ApiApps.ASCII_ARMOR, asciiArmorCheckBox.isChecked()); cv.put(KeychainContract.ApiApps.ASCII_ARMOR, asciiArmorCheckBox.isChecked());