add experimental drawer navigation
BIN
OpenPGP-Keychain/res/drawable-hdpi/drawer_shadow.9.png
Normal file
After Width: | Height: | Size: 171 B |
BIN
OpenPGP-Keychain/res/drawable-hdpi/ic_drawer.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 1.4 KiB |
BIN
OpenPGP-Keychain/res/drawable-mdpi/drawer_shadow.9.png
Normal file
After Width: | Height: | Size: 158 B |
BIN
OpenPGP-Keychain/res/drawable-mdpi/ic_drawer.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 1.3 KiB |
BIN
OpenPGP-Keychain/res/drawable-xhdpi/drawer_shadow.9.png
Normal file
After Width: | Height: | Size: 182 B |
BIN
OpenPGP-Keychain/res/drawable-xhdpi/ic_drawer.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.6 KiB |
@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:bootstrapbutton="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content" >
|
android:layout_height="wrap_content" >
|
||||||
|
|
||||||
@ -41,12 +42,16 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal" >
|
android:orientation="horizontal" >
|
||||||
|
|
||||||
<Button
|
<com.beardedhen.androidbootstrap.BootstrapButton
|
||||||
android:id="@+id/api_app_settings_select_key_button"
|
android:id="@+id/api_app_settings_select_key_button"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:text="@string/api_settings_select_key" />
|
android:layout_margin="4dp"
|
||||||
|
android:text="@string/api_settings_select_key"
|
||||||
|
bootstrapbutton:bb_icon_left="fa-key"
|
||||||
|
bootstrapbutton:bb_size="default"
|
||||||
|
bootstrapbutton:bb_type="default" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -76,11 +81,16 @@
|
|||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<Button
|
<com.beardedhen.androidbootstrap.BootstrapButton
|
||||||
android:id="@+id/api_app_settings_advanced_button"
|
android:id="@+id/api_app_settings_advanced_button"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/api_settings_show_advanced" />
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_margin="4dp"
|
||||||
|
android:text="@string/api_settings_show_advanced"
|
||||||
|
bootstrapbutton:bb_icon_left="fa-caret-up"
|
||||||
|
bootstrapbutton:bb_size="default"
|
||||||
|
bootstrapbutton:bb_type="default" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/api_app_settings_advanced"
|
android:id="@+id/api_app_settings_advanced"
|
||||||
|
36
OpenPGP-Keychain/res/layout/drawer_list_item.xml
Normal 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@android:id/text1"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAppearance="@android:style/TextAppearance.Medium"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:padding="16dp"
|
||||||
|
android:textColor="#fff"/>
|
||||||
|
<!--
|
||||||
|
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@android:id/text1"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceListItemSmall"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:paddingLeft="16dp"
|
||||||
|
android:paddingRight="16dp"
|
||||||
|
android:textColor="#fff"
|
||||||
|
android:background="?android:attr/activatedBackgroundIndicator"
|
||||||
|
android:minHeight="?android:attr/listPreferredItemHeightSmall"/> -->
|
23
OpenPGP-Keychain/res/layout/fragment_planet.xml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/image"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="#000000"
|
||||||
|
android:gravity="center"
|
||||||
|
android:padding="32dp" />
|
@ -1,14 +1,38 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<!-- A DrawerLayout is intended to be used as the top-level content view using match_parent for both width and height to consume the full space available. -->
|
||||||
|
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/drawer_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent" >
|
||||||
android:orientation="vertical" >
|
|
||||||
|
|
||||||
<fragment
|
<FrameLayout
|
||||||
android:id="@+id/key_list_public_fragment"
|
|
||||||
android:name="org.sufficientlysecure.keychain.ui.KeyListPublicFragment"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dip"
|
android:layout_height="match_parent" >
|
||||||
android:layout_weight="1" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
<fragment
|
||||||
|
android:id="@+id/key_list_public_fragment"
|
||||||
|
android:name="org.sufficientlysecure.keychain.ui.KeyListPublicFragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" />
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
android:layout_gravity="start" tells DrawerLayout to treat
|
||||||
|
this as a sliding drawer on the left side for left-to-right
|
||||||
|
languages and on the right side for right-to-left languages.
|
||||||
|
The drawer is given a fixed width in dp and extends the full height of
|
||||||
|
the container. A solid background is used for contrast
|
||||||
|
with the content view.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<ListView
|
||||||
|
android:id="@+id/left_drawer"
|
||||||
|
android:layout_width="240dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_gravity="start"
|
||||||
|
android:background="#111"
|
||||||
|
android:choiceMode="singleChoice"
|
||||||
|
android:divider="@android:color/transparent"
|
||||||
|
android:dividerHeight="0dp" />
|
||||||
|
|
||||||
|
</android.support.v4.widget.DrawerLayout>
|
8
OpenPGP-Keychain/res/values-sw600dp/dimens.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<resources>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Customize dimensions originally defined in res/values/dimens.xml (such as
|
||||||
|
screen margins) for sw600dp devices (e.g. 7" tablets) here.
|
||||||
|
-->
|
||||||
|
|
||||||
|
</resources>
|
9
OpenPGP-Keychain/res/values-sw720dp-land/dimens.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<resources>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Customize dimensions originally defined in res/values/dimens.xml (such as
|
||||||
|
screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
|
||||||
|
-->
|
||||||
|
<dimen name="activity_horizontal_margin">128dp</dimen>
|
||||||
|
|
||||||
|
</resources>
|
7
OpenPGP-Keychain/res/values/dimens.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<resources>
|
||||||
|
|
||||||
|
<!-- Default screen margins, per the Android Design guidelines. -->
|
||||||
|
<dimen name="activity_horizontal_margin">16dp</dimen>
|
||||||
|
<dimen name="activity_vertical_margin">16dp</dimen>
|
||||||
|
|
||||||
|
</resources>
|
@ -19,7 +19,7 @@
|
|||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
<!-- title -->
|
<!-- title -->
|
||||||
<string name="title_manage_public_keys">Public Keys</string>
|
<string name="title_manage_public_keys">Contacts</string>
|
||||||
<string name="title_manage_secret_keys">Secret Keys</string>
|
<string name="title_manage_secret_keys">Secret Keys</string>
|
||||||
<string name="title_select_recipients">Select Public Key</string>
|
<string name="title_select_recipients">Select Public Key</string>
|
||||||
<string name="title_select_secret_key">Select Secret Key</string>
|
<string name="title_select_secret_key">Select Secret Key</string>
|
||||||
@ -301,7 +301,7 @@
|
|||||||
<string name="compression_very_slow">very slow</string>
|
<string name="compression_very_slow">very slow</string>
|
||||||
|
|
||||||
<!-- Dashboard -->
|
<!-- Dashboard -->
|
||||||
<string name="dashboard_manage_keys">Manage Public Keys</string>
|
<string name="dashboard_manage_keys">Contacts</string>
|
||||||
<string name="dashboard_my_keys">My Secret Keys</string>
|
<string name="dashboard_my_keys">My Secret Keys</string>
|
||||||
<string name="dashboard_encrypt">Encrypt</string>
|
<string name="dashboard_encrypt">Encrypt</string>
|
||||||
<string name="dashboard_decrypt">Decrypt</string>
|
<string name="dashboard_decrypt">Decrypt</string>
|
||||||
@ -331,8 +331,8 @@
|
|||||||
|
|
||||||
<!-- Remote API -->
|
<!-- Remote API -->
|
||||||
<string name="api_no_apps">No registered applications!</string>
|
<string name="api_no_apps">No registered applications!</string>
|
||||||
<string name="api_settings_show_advanced">Show advanced settings…</string>
|
<string name="api_settings_show_advanced">Show advanced settings</string>
|
||||||
<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_save">Save</string>
|
<string name="api_settings_save">Save</string>
|
||||||
@ -369,4 +369,19 @@
|
|||||||
<!-- Key view -->
|
<!-- Key view -->
|
||||||
<string name="key_view_action_encrypt">Encrypt to this contact</string>
|
<string name="key_view_action_encrypt">Encrypt to this contact</string>
|
||||||
|
|
||||||
|
<!-- Navigation Drawer -->
|
||||||
|
<string-array name="drawer_array">
|
||||||
|
<item>Contacts</item>
|
||||||
|
<item>Encrypt</item>
|
||||||
|
<item>Decrypt</item>
|
||||||
|
<item>Import Keys</item>
|
||||||
|
<item>My Keys</item>
|
||||||
|
<item>Settings</item>
|
||||||
|
<item>Registered Apps</item>
|
||||||
|
<item>Help</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
|
<string name="drawer_open">Open navigation drawer</string>
|
||||||
|
<string name="drawer_close">Close navigation drawer</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
@ -49,12 +49,13 @@ import android.view.animation.AlphaAnimation;
|
|||||||
import android.view.animation.Animation;
|
import android.view.animation.Animation;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.AdapterView.OnItemSelectedListener;
|
import android.widget.AdapterView.OnItemSelectedListener;
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.beardedhen.androidbootstrap.BootstrapButton;
|
||||||
|
|
||||||
public class AppSettingsFragment extends Fragment {
|
public class AppSettingsFragment extends Fragment {
|
||||||
|
|
||||||
// model
|
// model
|
||||||
@ -62,12 +63,12 @@ public class AppSettingsFragment extends Fragment {
|
|||||||
|
|
||||||
// view
|
// view
|
||||||
private LinearLayout mAdvancedSettingsContainer;
|
private LinearLayout mAdvancedSettingsContainer;
|
||||||
private Button mAdvancedSettingsButton;
|
private BootstrapButton mAdvancedSettingsButton;
|
||||||
private TextView mAppNameView;
|
private TextView mAppNameView;
|
||||||
private ImageView mAppIconView;
|
private ImageView mAppIconView;
|
||||||
private TextView mKeyUserId;
|
private TextView mKeyUserId;
|
||||||
private TextView mKeyUserIdRest;
|
private TextView mKeyUserIdRest;
|
||||||
private Button mSelectKeyButton;
|
private BootstrapButton mSelectKeyButton;
|
||||||
private Spinner mEncryptionAlgorithm;
|
private Spinner mEncryptionAlgorithm;
|
||||||
private Spinner mHashAlgorithm;
|
private Spinner mHashAlgorithm;
|
||||||
private Spinner mCompression;
|
private Spinner mCompression;
|
||||||
@ -116,7 +117,8 @@ public class AppSettingsFragment extends Fragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initView(View view) {
|
private void initView(View view) {
|
||||||
mAdvancedSettingsButton = (Button) view.findViewById(R.id.api_app_settings_advanced_button);
|
mAdvancedSettingsButton = (BootstrapButton) view
|
||||||
|
.findViewById(R.id.api_app_settings_advanced_button);
|
||||||
mAdvancedSettingsContainer = (LinearLayout) view
|
mAdvancedSettingsContainer = (LinearLayout) view
|
||||||
.findViewById(R.id.api_app_settings_advanced);
|
.findViewById(R.id.api_app_settings_advanced);
|
||||||
|
|
||||||
@ -124,7 +126,8 @@ public class AppSettingsFragment extends Fragment {
|
|||||||
mAppIconView = (ImageView) view.findViewById(R.id.api_app_settings_app_icon);
|
mAppIconView = (ImageView) view.findViewById(R.id.api_app_settings_app_icon);
|
||||||
mKeyUserId = (TextView) view.findViewById(R.id.api_app_settings_user_id);
|
mKeyUserId = (TextView) view.findViewById(R.id.api_app_settings_user_id);
|
||||||
mKeyUserIdRest = (TextView) view.findViewById(R.id.api_app_settings_user_id_rest);
|
mKeyUserIdRest = (TextView) view.findViewById(R.id.api_app_settings_user_id_rest);
|
||||||
mSelectKeyButton = (Button) view.findViewById(R.id.api_app_settings_select_key_button);
|
mSelectKeyButton = (BootstrapButton) view
|
||||||
|
.findViewById(R.id.api_app_settings_select_key_button);
|
||||||
mEncryptionAlgorithm = (Spinner) view
|
mEncryptionAlgorithm = (Spinner) view
|
||||||
.findViewById(R.id.api_app_settings_encryption_algorithm);
|
.findViewById(R.id.api_app_settings_encryption_algorithm);
|
||||||
mHashAlgorithm = (Spinner) view.findViewById(R.id.api_app_settings_hash_algorithm);
|
mHashAlgorithm = (Spinner) view.findViewById(R.id.api_app_settings_hash_algorithm);
|
||||||
@ -204,11 +207,13 @@ public class AppSettingsFragment extends Fragment {
|
|||||||
if (mAdvancedSettingsContainer.getVisibility() == View.VISIBLE) {
|
if (mAdvancedSettingsContainer.getVisibility() == View.VISIBLE) {
|
||||||
mAdvancedSettingsContainer.startAnimation(invisibleAnimation);
|
mAdvancedSettingsContainer.startAnimation(invisibleAnimation);
|
||||||
mAdvancedSettingsContainer.setVisibility(View.GONE);
|
mAdvancedSettingsContainer.setVisibility(View.GONE);
|
||||||
mAdvancedSettingsButton.setText(R.string.api_settings_show_advanced);
|
mAdvancedSettingsButton.setText(getString(R.string.api_settings_show_advanced));
|
||||||
|
mAdvancedSettingsButton.setLeftIcon("fa-caret-up");
|
||||||
} else {
|
} else {
|
||||||
mAdvancedSettingsContainer.startAnimation(visibleAnimation);
|
mAdvancedSettingsContainer.startAnimation(visibleAnimation);
|
||||||
mAdvancedSettingsContainer.setVisibility(View.VISIBLE);
|
mAdvancedSettingsContainer.setVisibility(View.VISIBLE);
|
||||||
mAdvancedSettingsButton.setText(R.string.api_settings_hide_advanced);
|
mAdvancedSettingsButton.setText(getString(R.string.api_settings_hide_advanced));
|
||||||
|
mAdvancedSettingsButton.setLeftIcon("fa-caret-down");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -0,0 +1,444 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* from https://github.com/tobykurien/SherlockNavigationDrawer
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.sufficientlysecure.keychain.ui;
|
||||||
|
|
||||||
|
import org.sufficientlysecure.keychain.R;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.res.Configuration;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v4.app.ActionBarDrawerToggle;
|
||||||
|
import android.support.v4.view.GravityCompat;
|
||||||
|
import android.support.v4.widget.DrawerLayout;
|
||||||
|
import android.view.ActionProvider;
|
||||||
|
import android.view.ContextMenu.ContextMenuInfo;
|
||||||
|
import android.view.SubMenu;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.AdapterView;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.ListView;
|
||||||
|
|
||||||
|
import com.actionbarsherlock.app.SherlockFragmentActivity;
|
||||||
|
import com.actionbarsherlock.view.Menu;
|
||||||
|
import com.actionbarsherlock.view.MenuItem;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This example illustrates a common usage of the DrawerLayout widget in the Android support
|
||||||
|
* library.
|
||||||
|
* <p/>
|
||||||
|
* <p>
|
||||||
|
* When a navigation (left) drawer is present, the host activity should detect presses of the action
|
||||||
|
* bar's Up affordance as a signal to open and close the navigation drawer. The
|
||||||
|
* ActionBarDrawerToggle facilitates this behavior. Items within the drawer should fall into one of
|
||||||
|
* two categories:
|
||||||
|
* </p>
|
||||||
|
* <p/>
|
||||||
|
* <ul>
|
||||||
|
* <li><strong>View switches</strong>. A view switch follows the same basic policies as list or tab
|
||||||
|
* navigation in that a view switch does not create navigation history. This pattern should only be
|
||||||
|
* used at the root activity of a task, leaving some form of Up navigation active for activities
|
||||||
|
* further down the navigation hierarchy.</li>
|
||||||
|
* <li><strong>Selective Up</strong>. The drawer allows the user to choose an alternate parent for
|
||||||
|
* Up navigation. This allows a user to jump across an app's navigation hierarchy at will. The
|
||||||
|
* application should treat this as it treats Up navigation from a different task, replacing the
|
||||||
|
* current task stack using TaskStackBuilder or similar. This is the only form of navigation drawer
|
||||||
|
* that should be used outside of the root activity of a task.</li>
|
||||||
|
* </ul>
|
||||||
|
* <p/>
|
||||||
|
* <p>
|
||||||
|
* Right side drawers should be used for actions, not navigation. This follows the pattern
|
||||||
|
* established by the Action Bar that navigation should be to the left and actions to the right. An
|
||||||
|
* action should be an operation performed on the current contents of the window, for example
|
||||||
|
* enabling or disabling a data overlay on top of the current content.
|
||||||
|
* </p>
|
||||||
|
*/
|
||||||
|
public class DrawerActivity extends SherlockFragmentActivity {
|
||||||
|
private DrawerLayout mDrawerLayout;
|
||||||
|
private ListView mDrawerList;
|
||||||
|
private ActionBarDrawerToggle mDrawerToggle;
|
||||||
|
|
||||||
|
private CharSequence mDrawerTitle;
|
||||||
|
private CharSequence mTitle;
|
||||||
|
private String[] mDrawerTitles;
|
||||||
|
|
||||||
|
protected void setupDrawerNavigation(Bundle savedInstanceState) {
|
||||||
|
// mTitle = mDrawerTitle = getTitle();
|
||||||
|
mDrawerTitles = getResources().getStringArray(R.array.drawer_array);
|
||||||
|
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
|
||||||
|
mDrawerList = (ListView) findViewById(R.id.left_drawer);
|
||||||
|
|
||||||
|
// set a custom shadow that overlays the main content when the drawer
|
||||||
|
// opens
|
||||||
|
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
|
||||||
|
// set up the drawer's list view with items and click listener
|
||||||
|
mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.drawer_list_item,
|
||||||
|
mDrawerTitles));
|
||||||
|
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
|
||||||
|
|
||||||
|
// enable ActionBar app icon to behave as action to toggle nav drawer
|
||||||
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
getSupportActionBar().setHomeButtonEnabled(true);
|
||||||
|
|
||||||
|
// ActionBarDrawerToggle ties together the the proper interactions
|
||||||
|
// between the sliding drawer and the action bar app icon
|
||||||
|
mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */
|
||||||
|
mDrawerLayout, /* DrawerLayout object */
|
||||||
|
R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
|
||||||
|
R.string.drawer_open, /* "open drawer" description for accessibility */
|
||||||
|
R.string.drawer_close /* "close drawer" description for accessibility */
|
||||||
|
) {
|
||||||
|
public void onDrawerClosed(View view) {
|
||||||
|
getSupportActionBar().setTitle(mTitle);
|
||||||
|
supportInvalidateOptionsMenu(); // creates call to
|
||||||
|
// onPrepareOptionsMenu()
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onDrawerOpened(View drawerView) {
|
||||||
|
getSupportActionBar().setTitle(mDrawerTitle);
|
||||||
|
supportInvalidateOptionsMenu(); // creates call to
|
||||||
|
// onPrepareOptionsMenu()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
mDrawerLayout.setDrawerListener(mDrawerToggle);
|
||||||
|
|
||||||
|
if (savedInstanceState == null) {
|
||||||
|
selectItem(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Called whenever we call invalidateOptionsMenu() */
|
||||||
|
@Override
|
||||||
|
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||||
|
// If the nav drawer is open, hide action items related to the content
|
||||||
|
// view
|
||||||
|
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
|
||||||
|
// menu.findItem(R.id.action_websearch).setVisible(!drawerOpen);
|
||||||
|
return super.onPrepareOptionsMenu(menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(final MenuItem item) {
|
||||||
|
// The action bar home/up action should open or close the drawer.
|
||||||
|
// ActionBarDrawerToggle will take care of this.
|
||||||
|
if (mDrawerToggle.onOptionsItemSelected(getMenuItem(item))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle action buttons
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
// case R.id.action_websearch:
|
||||||
|
// // create intent to perform web search for this planet
|
||||||
|
// Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
|
||||||
|
// intent.putExtra(SearchManager.QUERY, getSupportActionBar().getTitle());
|
||||||
|
// // catch event that there's no activity to handle intent
|
||||||
|
// if (intent.resolveActivity(getPackageManager()) != null) {
|
||||||
|
// startActivity(intent);
|
||||||
|
// } else {
|
||||||
|
// Toast.makeText(this, R.string.app_not_available, Toast.LENGTH_LONG).show();
|
||||||
|
// }
|
||||||
|
// return true;
|
||||||
|
default:
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private android.view.MenuItem getMenuItem(final MenuItem item) {
|
||||||
|
return new android.view.MenuItem() {
|
||||||
|
@Override
|
||||||
|
public int getItemId() {
|
||||||
|
return item.getItemId();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEnabled() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean collapseActionView() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean expandActionView() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ActionProvider getActionProvider() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getActionView() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public char getAlphabeticShortcut() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getGroupId() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Drawable getIcon() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Intent getIntent() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ContextMenuInfo getMenuInfo() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public char getNumericShortcut() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getOrder() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SubMenu getSubMenu() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CharSequence getTitle() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CharSequence getTitleCondensed() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasSubMenu() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isActionViewExpanded() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCheckable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isChecked() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isVisible() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setActionProvider(ActionProvider actionProvider) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setActionView(View view) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setActionView(int resId) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setAlphabeticShortcut(char alphaChar) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setCheckable(boolean checkable) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setChecked(boolean checked) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setEnabled(boolean enabled) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setIcon(Drawable icon) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setIcon(int iconRes) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setIntent(Intent intent) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setNumericShortcut(char numericChar) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setOnActionExpandListener(OnActionExpandListener listener) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setOnMenuItemClickListener(
|
||||||
|
OnMenuItemClickListener menuItemClickListener) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setShortcut(char numericChar, char alphaChar) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setShowAsAction(int actionEnum) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setShowAsActionFlags(int actionEnum) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setTitle(CharSequence title) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setTitle(int title) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setTitleCondensed(CharSequence title) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public android.view.MenuItem setVisible(boolean visible) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The click listner for ListView in the navigation drawer */
|
||||||
|
private class DrawerItemClickListener implements ListView.OnItemClickListener {
|
||||||
|
@Override
|
||||||
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
selectItem(position);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void selectItem(int position) {
|
||||||
|
// update the main content by replacing fragments
|
||||||
|
// Fragment fragment = new PlanetFragment();
|
||||||
|
// Bundle args = new Bundle();
|
||||||
|
// args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);
|
||||||
|
// fragment.setArguments(args);
|
||||||
|
|
||||||
|
// FragmentManager fragmentManager = getSupportFragmentManager();
|
||||||
|
// fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
|
||||||
|
|
||||||
|
// update selected item and title, then close the drawer
|
||||||
|
mDrawerList.setItemChecked(position, true);
|
||||||
|
// setTitle(mDrawerTitles[position]);
|
||||||
|
mDrawerLayout.closeDrawer(mDrawerList);
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Override
|
||||||
|
// public void setTitle(CharSequence title) {
|
||||||
|
// mTitle = title;
|
||||||
|
// getSupportActionBar().setTitle(mTitle);
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When using the ActionBarDrawerToggle, you must call it during onPostCreate() and
|
||||||
|
* onConfigurationChanged()...
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostCreate(Bundle savedInstanceState) {
|
||||||
|
super.onPostCreate(savedInstanceState);
|
||||||
|
// Sync the toggle state after onRestoreInstanceState has occurred.
|
||||||
|
mDrawerToggle.syncState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onConfigurationChanged(Configuration newConfig) {
|
||||||
|
super.onConfigurationChanged(newConfig);
|
||||||
|
// Pass any configuration change to the drawer toggles
|
||||||
|
mDrawerToggle.onConfigurationChanged(newConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fragment that appears in the "content_frame", shows a planet
|
||||||
|
*/
|
||||||
|
// public static class PlanetFragment extends SherlockFragment {
|
||||||
|
// public static final String ARG_PLANET_NUMBER = "planet_number";
|
||||||
|
//
|
||||||
|
// public PlanetFragment() {
|
||||||
|
// // Empty constructor required for fragment subclasses
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
|
// Bundle savedInstanceState) {
|
||||||
|
// View rootView = inflater.inflate(R.layout.fragment_planet, container, false);
|
||||||
|
// int i = getArguments().getInt(ARG_PLANET_NUMBER);
|
||||||
|
// String planet = getResources().getStringArray(R.array.drawer_array)[i];
|
||||||
|
//
|
||||||
|
// int imageId = getResources().getIdentifier(planet.toLowerCase(Locale.getDefault()),
|
||||||
|
// "drawable", getActivity().getPackageName());
|
||||||
|
// ((ImageView) rootView.findViewById(R.id.image)).setImageResource(imageId);
|
||||||
|
// getActivity().setTitle(planet);
|
||||||
|
// return rootView;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
@ -45,8 +45,7 @@ import com.actionbarsherlock.app.SherlockFragmentActivity;
|
|||||||
* TODO: get key type by looking at dataUri!
|
* TODO: get key type by looking at dataUri!
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class KeyActivity extends SherlockFragmentActivity {
|
public class KeyActivity extends DrawerActivity {
|
||||||
|
|
||||||
protected FileDialogFragment mFileDialog;
|
protected FileDialogFragment mFileDialog;
|
||||||
protected String mExportFilename;
|
protected String mExportFilename;
|
||||||
|
|
||||||
|
@ -35,8 +35,8 @@ public class KeyListPublicActivity extends KeyActivity {
|
|||||||
|
|
||||||
setContentView(R.layout.key_list_public_activity);
|
setContentView(R.layout.key_list_public_activity);
|
||||||
|
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
// now setup navigation drawer in DrawerActivity...
|
||||||
getSupportActionBar().setHomeButtonEnabled(true);
|
setupDrawerNavigation(savedInstanceState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -49,13 +49,6 @@ public class KeyListPublicActivity extends KeyActivity {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case android.R.id.home:
|
|
||||||
// app icon in Action Bar clicked; go home
|
|
||||||
Intent intent = new Intent(this, MainActivity.class);
|
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
|
||||||
startActivity(intent);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
case R.id.menu_key_list_public_import:
|
case R.id.menu_key_list_public_import:
|
||||||
Intent intentImportFromFile = new Intent(this, ImportKeysActivity.class);
|
Intent intentImportFromFile = new Intent(this, ImportKeysActivity.class);
|
||||||
startActivityForResult(intentImportFromFile, Id.request.import_from_qr_code);
|
startActivityForResult(intentImportFromFile, Id.request.import_from_qr_code);
|
||||||
|