Brion VIBBER has submitted this change and it was merged.
Change subject: Design tweaks for nav drawer
......................................................................
Design tweaks for nav drawer
- Designers are experimenting with the color
- Search bar is hidden as well
- Zero indicators have been removed. Need to be re-done
- Does not use a ListView anymore. Not customizable enough.
- Need to add icons
Change-Id: Ic6ef5e3f814ee2d466bdbaddfbf8cc7767fee5fd
---
M wikipedia/res/layout/activity_main.xml
M wikipedia/res/layout/fragment_navdrawer.xml
M wikipedia/res/values/strings.xml
M wikipedia/src/main/java/org/wikipedia/NavDrawerFragment.java
4 files changed, 284 insertions(+), 165 deletions(-)
Approvals:
Brion VIBBER: Verified; Looks good to me, approved
diff --git a/wikipedia/res/layout/activity_main.xml
b/wikipedia/res/layout/activity_main.xml
index 1172107..4f0dfa2 100644
--- a/wikipedia/res/layout/activity_main.xml
+++ b/wikipedia/res/layout/activity_main.xml
@@ -1,30 +1,29 @@
-<FrameLayout
+<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
android:layout_height="match_parent">
- <android.support.v4.widget.DrawerLayout
- android:id="@+id/drawer_layout"
- android:layout_width="match_parent"
- android:saveEnabled="false"
- android:layout_height="match_parent">
- <!-- The main content view -->
+ android:id="@+id/drawer_layout"
+ android:layout_width="match_parent"
+ android:saveEnabled="false"
+ android:layout_height="match_parent">
+ <!-- The main content view -->
+ <FrameLayout android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
- <!-- The navigation drawer -->
- <!-- Don't set marginTop here, it somehow also affects marginBottom.
wtf?! -->
- <fragment android:layout_width="wrap_content"
android:layout_height="match_parent"
- android:name="org.wikipedia.NavDrawerFragment"
- android:layout_gravity="start"
+ <fragment
+ android:id="@+id/search_fragment"
+ android:name="org.wikipedia.search.SearchArticlesFragment"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_gravity="top"
/>
-
- </android.support.v4.widget.DrawerLayout>
- <fragment
- android:id="@+id/search_fragment"
- android:name="org.wikipedia.search.SearchArticlesFragment"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:layout_gravity="top"
+ </FrameLayout>
+ <!-- The navigation drawer -->
+ <!-- Don't set marginTop here, it somehow also affects marginBottom. wtf?!
-->
+ <fragment android:layout_width="wrap_content"
android:layout_height="match_parent"
+ android:name="org.wikipedia.NavDrawerFragment"
+ android:layout_gravity="start"
/>
-</FrameLayout>
+
+</android.support.v4.widget.DrawerLayout>
diff --git a/wikipedia/res/layout/fragment_navdrawer.xml
b/wikipedia/res/layout/fragment_navdrawer.xml
index 64f9d9e..993e939 100644
--- a/wikipedia/res/layout/fragment_navdrawer.xml
+++ b/wikipedia/res/layout/fragment_navdrawer.xml
@@ -1,24 +1,202 @@
<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="196dp"
android:layout_height="match_parent"
- android:orientation="vertical"
- android:background="#111">
- <!-- Match marginTop with height of Search Fragment -->
- <ListView android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:layout_marginTop="48dp"
- android:id="@+id/nav_list">
- </ListView>
- <org.wikipedia.styledviews.StyledTextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="12sp"
- android:textColor="#777"
- android:padding="4dp"
- android:id="@+id/nav_drawer_version"
- android:gravity="right"
- />
-</LinearLayout>
\ No newline at end of file
+ android:fillViewport="true"
+ android:background="#00af89">
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:id="@+id/nav_item_container"
+ >
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:id="@+id/nav_item_login"
+
android:background="?android:attr/selectableItemBackground"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp"
+ android:paddingRight="8dp"
+ >
+ <ImageView android:layout_width="32dp" android:layout_height="32dp"
+ android:layout_margin="8dp"
+ android:layout_gravity="top"
+ android:background="#ffffff"
+ />
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ >
+ <org.wikipedia.styledviews.StyledTextView
+ android:layout_width="match_parent"
+ android:layout_height="48dp"
+ android:gravity="center_vertical"
+ android:layout_gravity="center_vertical"
+ android:text="@string/nav_item_login"
+ style="?android:textAppearanceMediumInverse"
+ />
+ <org.wikipedia.styledviews.StyledTextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:text="@string/nav_item_login_benefits"
+ style="?android:textAppearanceSmallInverse"
+ />
+ </LinearLayout>
+ </LinearLayout>
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:id="@+id/nav_item_username"
+
android:background="?android:attr/selectableItemBackground"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp"
+ android:paddingRight="8dp"
+ android:visibility="gone"
+ >
+ <ImageView android:layout_width="32dp" android:layout_height="32dp"
+ android:layout_margin="8dp"
+ android:layout_gravity="center_vertical"
+ android:background="#ffffff"
+ />
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ >
+ <org.wikipedia.styledviews.StyledTextView
+ android:layout_width="match_parent"
+ android:layout_height="48dp"
+ android:gravity="center_vertical"
+ android:layout_gravity="center_vertical"
+ android:id="@+id/nav_item_username_primary_text"
+ style="?android:textAppearanceMediumInverse"
+ />
+ <org.wikipedia.styledviews.StyledTextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:text="@string/nav_item_tap_to_logout"
+ style="?android:textAppearanceSmallInverse"
+ />
+ </LinearLayout>
+ </LinearLayout>
+
+ <View android:layout_width="match_parent"
android:layout_height="0.5dp" android:background="#038368" />
+
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:id="@+id/nav_item_history"
+
android:background="?android:attr/selectableItemBackground"
+ >
+ <ImageView android:layout_width="32dp" android:layout_height="32dp"
+ android:layout_margin="8dp"
+ android:layout_gravity="center_vertical"
+ android:background="#ffffff"
+ />
+ <org.wikipedia.styledviews.StyledTextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:text="@string/nav_item_history"
+ style="?android:textAppearanceMediumInverse"
+ />
+ </LinearLayout>
+
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:id="@+id/nav_item_saved_pages"
+
android:background="?android:attr/selectableItemBackground"
+ >
+ <ImageView android:layout_width="32dp" android:layout_height="32dp"
+ android:layout_margin="8dp"
+ android:layout_gravity="center_vertical"
+ android:background="#ffffff"
+ />
+ <org.wikipedia.styledviews.StyledTextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:text="@string/nav_item_saved_pages"
+ style="?android:textAppearanceMediumInverse"
+ />
+ </LinearLayout>
+
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:id="@+id/nav_item_random"
+
android:background="?android:attr/selectableItemBackground"
+ >
+ <ImageView android:layout_width="32dp" android:layout_height="32dp"
+ android:layout_margin="8dp"
+ android:layout_gravity="center_vertical"
+ android:background="#ffffff"
+ />
+ <org.wikipedia.styledviews.StyledTextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:text="@string/nav_item_random"
+ style="?android:textAppearanceMediumInverse"
+ />
+ </LinearLayout>
+
+ <!-- Separator view for providing gap between top items and bottom
ones -->
+ <View android:layout_width="match_parent" android:layout_height="0dp"
android:layout_weight="1" />
+
+ <org.wikipedia.styledviews.StyledTextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textSize="12sp"
+ android:textColor="#fff"
+ android:padding="4dp"
+ android:id="@+id/nav_drawer_version"
+ android:gravity="right"
+ />
+
+ <View android:layout_width="match_parent"
android:layout_height="0.5dp" android:background="#038368" />
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:id="@+id/nav_item_settings"
+
android:background="?android:attr/selectableItemBackground"
+ >
+ <ImageView android:layout_width="32dp" android:layout_height="32dp"
+ android:layout_margin="8dp"
+ android:layout_gravity="center_vertical"
+ android:background="#ffffff"
+ />
+ <org.wikipedia.styledviews.StyledTextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:text="@string/nav_item_preferences"
+ style="?android:textAppearanceMediumInverse"
+ />
+ </LinearLayout>
+
+ <LinearLayout android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:id="@+id/nav_item_send_feedback"
+
android:background="?android:attr/selectableItemBackground"
+ >
+ <ImageView android:layout_width="32dp" android:layout_height="32dp"
+ android:layout_margin="8dp"
+ android:layout_gravity="center_vertical"
+ android:background="#ffffff"
+ />
+ <org.wikipedia.styledviews.StyledTextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:text="@string/nav_item_send_feedback"
+ style="?android:textAppearanceMediumInverse"
+ />
+ </LinearLayout>
+
+ </LinearLayout>
+</ScrollView>
\ No newline at end of file
diff --git a/wikipedia/res/values/strings.xml b/wikipedia/res/values/strings.xml
index 2c48660..e2eb86d 100644
--- a/wikipedia/res/values/strings.xml
+++ b/wikipedia/res/values/strings.xml
@@ -116,4 +116,6 @@
<string name="edit_summary_hint">Edit summary</string>
<string name="nav_item_random">Random</string>
<string name="random_progress">Fetching random page...</string>
+ <string name="nav_item_login_benefits">If you Log in, your edits will be
associated with your username and your IP will not be publicly visible.</string>
+ <string name="nav_item_tap_to_logout">Tap to log out</string>
</resources>
diff --git a/wikipedia/src/main/java/org/wikipedia/NavDrawerFragment.java
b/wikipedia/src/main/java/org/wikipedia/NavDrawerFragment.java
index 0672b35..98057e8 100644
--- a/wikipedia/src/main/java/org/wikipedia/NavDrawerFragment.java
+++ b/wikipedia/src/main/java/org/wikipedia/NavDrawerFragment.java
@@ -2,7 +2,6 @@
import android.app.*;
import android.content.*;
-import android.graphics.*;
import android.net.*;
import android.os.*;
import android.support.v4.app.Fragment;
@@ -10,31 +9,22 @@
import android.widget.*;
import org.wikipedia.history.*;
import org.wikipedia.login.*;
-import org.wikipedia.random.RandomHandler;
+import org.wikipedia.random.*;
import org.wikipedia.savedpages.*;
import org.wikipedia.settings.*;
-public class NavDrawerFragment extends Fragment implements
AdapterView.OnItemClickListener {
+public class NavDrawerFragment extends Fragment implements
View.OnClickListener {
private static final int[] ACTION_ITEMS_TEXT = {
- R.string.nav_item_history,
- R.string.nav_item_saved_pages,
- R.string.nav_item_preferences,
- R.string.nav_item_login,
- R.string.nav_item_random,
- R.string.nav_item_send_feedback,
- R.string.zero_free_verbiage
- };
- private static final int[] ACTION_ITEM_IMAGES = {
- android.R.drawable.ic_menu_recent_history,
- android.R.drawable.ic_menu_save,
- android.R.drawable.ic_menu_preferences,
- android.R.drawable.ic_menu_add,
- android.R.drawable.ic_menu_directions,
- android.R.drawable.ic_menu_send
+ R.id.nav_item_history,
+ R.id.nav_item_saved_pages,
+ R.id.nav_item_settings,
+ R.id.nav_item_login,
+ R.id.nav_item_username,
+ R.id.nav_item_random,
+ R.id.nav_item_send_feedback
};
- private ListView navList;
- private NavListAdapter adapter;
+ private View[] actionViews = new View[ACTION_ITEMS_TEXT.length];
private WikipediaApp app;
private RandomHandler randomHandler;
@@ -49,71 +39,40 @@
// Ensure that Login / Logout status is accurate
setupDynamicItems();
- ((NavListAdapter)navList.getAdapter()).notifyDataSetChanged();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- navList = (ListView) getView().findViewById(R.id.nav_list);
- adapter = new NavListAdapter();
app = (WikipediaApp)getActivity().getApplicationContext();
((TextView)getView().findViewById(R.id.nav_drawer_version)).setText(WikipediaApp.APP_VERSION_STRING);
- navList.setAdapter(adapter);
- navList.setOnItemClickListener(this);
+ for (int i = 0; i < ACTION_ITEMS_TEXT.length; i++) {
+ actionViews[i] = getView().findViewById(ACTION_ITEMS_TEXT[i]);
+ actionViews[i].setOnClickListener(this);
+ }
randomHandler = new RandomHandler(getActivity());
}
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
- Intent intent = new Intent();
- switch ((Integer)view.getTag()) {
- case R.string.nav_item_history:
- intent.setClass(this.getActivity(), HistoryActivity.class);
- getActivity().startActivity(intent);
- break;
- case R.string.nav_item_saved_pages:
- intent.setClass(this.getActivity(), SavedPagesActivity.class);
- startActivity(intent);
- break;
- case R.string.nav_item_preferences:
- intent.setClass(this.getActivity(), SettingsActivity.class);
- startActivity(intent);
- break;
- case R.string.nav_item_login:
- intent.setClass(this.getActivity(), LoginActivity.class);
- startActivity(intent);
- break;
- case R.string.nav_item_random:
- randomHandler.doVistRandomArticle();
- break;
- case R.string.nav_item_logout:
- doLogout();
- break;
- case R.string.zero_free_verbiage:
- return;
- case R.string.nav_item_send_feedback:
- // Will be stripped out in prod builds
- intent.setAction(Intent.ACTION_SENDTO);
- // Will be moved to a better email address at some point
- // FIXME: Have build info here, perhaps? We can't access it
anywhere yet
-
intent.setData(Uri.parse("mailto:[email protected]?subject=Android App "
+ WikipediaApp.APP_VERSION_STRING + " Feedback"));
- startActivity(intent);
- break;
- default:
- throw new RuntimeException("Unknown ID clicked!");
- }
- }
-
+ private View usernameContainer;
+ private View loginContainer;
+ private TextView usernamePrimaryText;
private void setupDynamicItems() {
+ if (usernameContainer == null) {
+ usernameContainer = getView().findViewById(R.id.nav_item_username);
+ usernamePrimaryText = (TextView)
usernameContainer.findViewById(R.id.nav_item_username_primary_text);
+ loginContainer = getView().findViewById(R.id.nav_item_login);
+ }
// Do login / logout swap
if (app.getUserInfoStorage().isLoggedIn()) {
- ACTION_ITEMS_TEXT[3] = R.string.nav_item_logout;
+ loginContainer.setVisibility(View.GONE);
+ usernameContainer.setVisibility(View.VISIBLE);
+
usernamePrimaryText.setText(app.getUserInfoStorage().getUser().getUsername());
} else {
- ACTION_ITEMS_TEXT[3] = R.string.nav_item_login;
+ usernameContainer.setVisibility(View.GONE);
+ loginContainer.setVisibility(View.VISIBLE);
}
}
@@ -132,65 +91,46 @@
public void onFinish(Boolean result) {
progressDialog.dismiss();
setupDynamicItems();
- ((NavListAdapter)navList.getAdapter()).notifyDataSetChanged();
}
}.execute();
}
- private class NavListAdapter extends BaseAdapter {
-
- @Override
- public int getCount() {
- return ACTION_ITEMS_TEXT.length;
- }
-
- @Override
- public Object getItem(int position) {
- return ACTION_ITEMS_TEXT[position];
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- if (convertView == null) {
- convertView =
getActivity().getLayoutInflater().inflate(R.layout.item_nav_item, parent,
false);
- }
- TextView navText =
(TextView)convertView.findViewById(R.id.nav_item_text);
-
- if (ACTION_ITEMS_TEXT[position] == R.string.zero_free_verbiage) {
- if (WikipediaApp.getWikipediaZeroDisposition()) {
- navText.setText(WikipediaApp.getCarrierMessage());
- navText.setTextColor(Color.GRAY);
- navText.setTextSize(11.0f);
- } else {
- navText.setText("");
- }
-
- convertView.setTag(ACTION_ITEMS_TEXT[position]);
- boolean a = true;
- return convertView;
- }
-
- ImageView navImage =
(ImageView)convertView.findViewById(R.id.nav_item_image);
- navText.setText(ACTION_ITEMS_TEXT[position]);
- navImage.setImageResource(ACTION_ITEM_IMAGES[position]);
- convertView.setTag(ACTION_ITEMS_TEXT[position]);
-
- return convertView;
- }
-
- @Override
- public boolean areAllItemsEnabled() {
- return false;
- }
-
- @Override
- public boolean isEnabled(int position) {
- return ACTION_ITEMS_TEXT[position] == R.string.zero_free_verbiage
? WikipediaApp.getWikipediaZeroDisposition() : true;
+ @Override
+ public void onClick(View view) {
+ Intent intent = new Intent();
+ switch (view.getId()) {
+ case R.id.nav_item_history:
+ intent.setClass(this.getActivity(), HistoryActivity.class);
+ getActivity().startActivity(intent);
+ break;
+ case R.id.nav_item_saved_pages:
+ intent.setClass(this.getActivity(), SavedPagesActivity.class);
+ startActivity(intent);
+ break;
+ case R.id.nav_item_settings:
+ intent.setClass(this.getActivity(), SettingsActivity.class);
+ startActivity(intent);
+ break;
+ case R.id.nav_item_login:
+ intent.setClass(this.getActivity(), LoginActivity.class);
+ startActivity(intent);
+ break;
+ case R.id.nav_item_random:
+ randomHandler.doVistRandomArticle();
+ break;
+ case R.id.nav_item_username:
+ doLogout();
+ break;
+ case R.id.nav_item_send_feedback:
+ // Will be stripped out in prod builds
+ intent.setAction(Intent.ACTION_SENDTO);
+ // Will be moved to a better email address at some point
+
intent.setData(Uri.parse("mailto:[email protected]?subject=Android App "
+ WikipediaApp.APP_VERSION_STRING + " Feedback"));
+ startActivity(intent);
+ break;
+ default:
+ throw new RuntimeException("Unknown ID clicked!");
}
}
+
}
\ No newline at end of file
--
To view, visit https://gerrit.wikimedia.org/r/118670
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ic6ef5e3f814ee2d466bdbaddfbf8cc7767fee5fd
Gerrit-PatchSet: 3
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Yuvipanda <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Yuvipanda <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits