Dbrant has uploaded a new change for review.
https://gerrit.wikimedia.org/r/173290
Change subject: Migration to Toolbar, and 5.0 support <3
......................................................................
Migration to Toolbar, and 5.0 support <3
- Upgrade target SDK to 21
- Upgrade build-tools to 21.1
- Upgrade support library to 21.0
- Implement Toolbar to take the place of the "old" ActionBar
- Delete drawables and styles related to the old ActionBar
- Bring back the old quick-return handler, since the Toolbar is a regular
ViewGroup now.
Notes:
- I gave the Toolbar a manual drop-shadow, since the AppCompat library
does not yet support the "elevation" api. Once it becomes supported, we
can use setElevation().
- The Settings window (PreferenceActivity) doesn't have an ActionBar,
since that's not supported by the AppCompat library either. We may need
to manually give it a Toolbar, just like in the Main activity.
Change-Id: I9a00c49dd2544d7d2b1990028db2fb8ee1ce97d4
---
M wikipedia/AndroidManifest.xml
M wikipedia/build.gradle
D wikipedia/res/drawable-hdpi/ic_drawer.png
D wikipedia/res/drawable-ldrtl-hdpi/ic_drawer.png
D wikipedia/res/drawable-ldrtl-mdpi/ic_drawer.png
D wikipedia/res/drawable-ldrtl-xhdpi/ic_drawer.png
D wikipedia/res/drawable-ldrtl-xxhdpi/ic_drawer.png
D wikipedia/res/drawable-mdpi/ic_drawer.png
D wikipedia/res/drawable-xhdpi/ic_drawer.png
D wikipedia/res/drawable-xxhdpi/ic_drawer.png
D wikipedia/res/drawable/actionbar_themedark.xml
D wikipedia/res/drawable/actionbar_themelight.xml
A wikipedia/res/drawable/toolbar_bottom_shadow.xml
M wikipedia/res/layout/activity_main.xml
M wikipedia/res/layout/fragment_history.xml
M wikipedia/res/layout/fragment_navdrawer.xml
M wikipedia/res/layout/fragment_nearby.xml
M wikipedia/res/layout/fragment_page.xml
M wikipedia/res/layout/fragment_saved_pages.xml
M wikipedia/res/layout/group_toc_intro.xml
M wikipedia/res/values/colors.xml
M wikipedia/res/values/dimens.xml
M wikipedia/res/values/styles_wikidark.xml
M wikipedia/res/values/styles_wikilight.xml
M wikipedia/src/main/java/org/wikipedia/ThemedActionBarActivity.java
M wikipedia/src/main/java/org/wikipedia/Utils.java
M wikipedia/src/main/java/org/wikipedia/page/PageActivity.java
M wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
M wikipedia/src/main/java/org/wikipedia/page/ToCHandler.java
M wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
M wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
M wikipedia/src/main/java/org/wikipedia/search/SearchBarHideHandler.java
M wikipedia/src/main/java/org/wikipedia/settings/PreferenceActivityWithBack.java
33 files changed, 184 insertions(+), 209 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia
refs/changes/90/173290/1
diff --git a/wikipedia/AndroidManifest.xml b/wikipedia/AndroidManifest.xml
index aabdc36..f161afb 100644
--- a/wikipedia/AndroidManifest.xml
+++ b/wikipedia/AndroidManifest.xml
@@ -43,6 +43,7 @@
<!-- Don't delete the meta-data field above -->
<activity android:name=".page.PageActivity"
+ android:theme="@style/NoTitle"
android:windowSoftInputMode="stateHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
diff --git a/wikipedia/build.gradle b/wikipedia/build.gradle
index 9204be7..1a1a44e 100644
--- a/wikipedia/build.gradle
+++ b/wikipedia/build.gradle
@@ -3,12 +3,12 @@
def versionStart = '2.0'
android {
- compileSdkVersion 19
- buildToolsVersion '20.0.0'
+ compileSdkVersion 21
+ buildToolsVersion '21.1.0'
defaultConfig {
applicationId 'org.wikipedia'
minSdkVersion 10
- targetSdkVersion 17
+ targetSdkVersion 21
versionCode 88
testApplicationId "org.wikipedia.test"
}
@@ -110,8 +110,8 @@
exclude group: 'org.json', module: 'json'
}
compile 'de.keyboardsurfer.android.widget:crouton:1.8.5@aar'
- compile 'com.android.support:support-v4:20.0.0'
- compile 'com.android.support:appcompat-v7:20.0.0@aar'
+ compile 'com.android.support:support-v4:21.0.+'
+ compile 'com.android.support:appcompat-v7:21.0.+@aar'
}
// The next block is for setting the release signing config from a file
outside the git repo
diff --git a/wikipedia/res/drawable-hdpi/ic_drawer.png
b/wikipedia/res/drawable-hdpi/ic_drawer.png
deleted file mode 100644
index 3f1933b..0000000
--- a/wikipedia/res/drawable-hdpi/ic_drawer.png
+++ /dev/null
Binary files differ
diff --git a/wikipedia/res/drawable-ldrtl-hdpi/ic_drawer.png
b/wikipedia/res/drawable-ldrtl-hdpi/ic_drawer.png
deleted file mode 100644
index 0a3064a..0000000
--- a/wikipedia/res/drawable-ldrtl-hdpi/ic_drawer.png
+++ /dev/null
Binary files differ
diff --git a/wikipedia/res/drawable-ldrtl-mdpi/ic_drawer.png
b/wikipedia/res/drawable-ldrtl-mdpi/ic_drawer.png
deleted file mode 100644
index 6c5518b..0000000
--- a/wikipedia/res/drawable-ldrtl-mdpi/ic_drawer.png
+++ /dev/null
Binary files differ
diff --git a/wikipedia/res/drawable-ldrtl-xhdpi/ic_drawer.png
b/wikipedia/res/drawable-ldrtl-xhdpi/ic_drawer.png
deleted file mode 100644
index 4d909ff..0000000
--- a/wikipedia/res/drawable-ldrtl-xhdpi/ic_drawer.png
+++ /dev/null
Binary files differ
diff --git a/wikipedia/res/drawable-ldrtl-xxhdpi/ic_drawer.png
b/wikipedia/res/drawable-ldrtl-xxhdpi/ic_drawer.png
deleted file mode 100644
index 1d2fcfa..0000000
--- a/wikipedia/res/drawable-ldrtl-xxhdpi/ic_drawer.png
+++ /dev/null
Binary files differ
diff --git a/wikipedia/res/drawable-mdpi/ic_drawer.png
b/wikipedia/res/drawable-mdpi/ic_drawer.png
deleted file mode 100644
index 93e1d5e..0000000
--- a/wikipedia/res/drawable-mdpi/ic_drawer.png
+++ /dev/null
Binary files differ
diff --git a/wikipedia/res/drawable-xhdpi/ic_drawer.png
b/wikipedia/res/drawable-xhdpi/ic_drawer.png
deleted file mode 100644
index b9529d0..0000000
--- a/wikipedia/res/drawable-xhdpi/ic_drawer.png
+++ /dev/null
Binary files differ
diff --git a/wikipedia/res/drawable-xxhdpi/ic_drawer.png
b/wikipedia/res/drawable-xxhdpi/ic_drawer.png
deleted file mode 100644
index a4bf10d..0000000
--- a/wikipedia/res/drawable-xxhdpi/ic_drawer.png
+++ /dev/null
Binary files differ
diff --git a/wikipedia/res/drawable/actionbar_themedark.xml
b/wikipedia/res/drawable/actionbar_themedark.xml
deleted file mode 100644
index 8a5bc16..0000000
--- a/wikipedia/res/drawable/actionbar_themedark.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
- <item>
- <shape android:shape="rectangle">
- <solid android:color="@color/actionbar_line_dark" />
- </shape>
- </item>
- <item android:bottom="2dip">
- <shape android:shape="rectangle">
- <solid android:color="@color/actionbar_background_dark" />
- </shape>
- </item>
-</layer-list>
\ No newline at end of file
diff --git a/wikipedia/res/drawable/actionbar_themelight.xml
b/wikipedia/res/drawable/actionbar_themelight.xml
deleted file mode 100644
index e002456..0000000
--- a/wikipedia/res/drawable/actionbar_themelight.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
- <item>
- <shape android:shape="rectangle">
- <solid android:color="@color/actionbar_line_light" />
- </shape>
- </item>
- <item android:bottom="2dip">
- <shape android:shape="rectangle">
- <solid android:color="@color/actionbar_background_light" />
- </shape>
- </item>
-</layer-list>
\ No newline at end of file
diff --git a/wikipedia/res/drawable/toolbar_bottom_shadow.xml
b/wikipedia/res/drawable/toolbar_bottom_shadow.xml
new file mode 100644
index 0000000..8b16103
--- /dev/null
+++ b/wikipedia/res/drawable/toolbar_bottom_shadow.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <gradient
+ android:startColor="#50000000"
+ android:endColor="#00000000"
+ android:angle="270"/>
+</shape>
\ No newline at end of file
diff --git a/wikipedia/res/layout/activity_main.xml
b/wikipedia/res/layout/activity_main.xml
index 81ed8da..640c00d 100644
--- a/wikipedia/res/layout/activity_main.xml
+++ b/wikipedia/res/layout/activity_main.xml
@@ -30,4 +30,40 @@
android:id="@+id/search_fragment"
android:name="org.wikipedia.search.SearchArticlesFragment"
tools:layout="@layout/fragment_search"/>
+
+ <LinearLayout
+ android:id="@+id/main_toolbar_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+ <android.support.v7.widget.Toolbar
+ android:id="@+id/main_toolbar"
+ android:layout_width="match_parent"
+ android:layout_height="?attr/actionBarSize">
+ <View
+ android:id="@+id/main_w_logo"
+ android:layout_width="32dp"
+ android:layout_height="32dp"
+ android:background="@drawable/search_w"
+ android:alpha="0.5"/>
+ </android.support.v7.widget.Toolbar>
+ <ProgressBar
+ android:id="@+id/main_progressbar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="-7.5dp"
+ android:layout_gravity="bottom"
+ style="?android:attr/progressBarStyleHorizontal"/>
+ </FrameLayout>
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="6dp"
+ android:layout_gravity="bottom"
+ android:background="@drawable/toolbar_bottom_shadow"
+ />
+ </LinearLayout>
+
</FrameLayout>
\ No newline at end of file
diff --git a/wikipedia/res/layout/fragment_history.xml
b/wikipedia/res/layout/fragment_history.xml
index 65c5759..80bd4d9 100644
--- a/wikipedia/res/layout/fragment_history.xml
+++ b/wikipedia/res/layout/fragment_history.xml
@@ -4,7 +4,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/window_background_color"
- android:paddingTop="@dimen/actionBarHeight">
+ android:paddingTop="?attr/actionBarSize">
<LinearLayout
android:id="@+id/history_empty_container"
android:orientation="vertical"
diff --git a/wikipedia/res/layout/fragment_navdrawer.xml
b/wikipedia/res/layout/fragment_navdrawer.xml
index 873dada..6b56ff0 100644
--- a/wikipedia/res/layout/fragment_navdrawer.xml
+++ b/wikipedia/res/layout/fragment_navdrawer.xml
@@ -19,7 +19,7 @@
>
<!-- Spacer to make room for the search bar on top -->
- <View android:layout_width="match_parent"
android:layout_height="@dimen/actionBarHeight" />
+ <View android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" />
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
diff --git a/wikipedia/res/layout/fragment_nearby.xml
b/wikipedia/res/layout/fragment_nearby.xml
index ad36dc7..c6c78f8 100644
--- a/wikipedia/res/layout/fragment_nearby.xml
+++ b/wikipedia/res/layout/fragment_nearby.xml
@@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/page_background_color"
- android:paddingTop="@dimen/actionBarHeight">
+ android:paddingTop="?attr/actionBarSize">
<LinearLayout
android:id="@+id/nearby_empty_container"
diff --git a/wikipedia/res/layout/fragment_page.xml
b/wikipedia/res/layout/fragment_page.xml
index d2685b3..a3538dc 100644
--- a/wikipedia/res/layout/fragment_page.xml
+++ b/wikipedia/res/layout/fragment_page.xml
@@ -28,7 +28,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:paddingTop="48dp"
+ android:paddingTop="?attr/actionBarSize"
>
<org.wikipedia.page.leadimages.ImageViewWithFace
android:id="@+id/page_image_1"
@@ -96,7 +96,7 @@
android:id="@+id/page_toc_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_marginTop="@dimen/actionBarHeight"
+ android:layout_marginTop="?attr/actionBarSize"
android:background="?attr/toc_background_color"
android:visibility="gone"
android:choiceMode="singleChoice"
diff --git a/wikipedia/res/layout/fragment_saved_pages.xml
b/wikipedia/res/layout/fragment_saved_pages.xml
index cd25b05..ab79163 100644
--- a/wikipedia/res/layout/fragment_saved_pages.xml
+++ b/wikipedia/res/layout/fragment_saved_pages.xml
@@ -4,7 +4,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/window_background_color"
- android:paddingTop="@dimen/actionBarHeight">
+ android:paddingTop="?attr/actionBarSize">
<LinearLayout
android:id="@+id/saved_pages_empty_container"
android:orientation="vertical"
diff --git a/wikipedia/res/layout/group_toc_intro.xml
b/wikipedia/res/layout/group_toc_intro.xml
index 4a1c0d5..8e20e84 100644
--- a/wikipedia/res/layout/group_toc_intro.xml
+++ b/wikipedia/res/layout/group_toc_intro.xml
@@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
- android:layout_marginTop="48dp"
+ android:layout_marginTop="?attr/actionBarSize"
android:gravity="center"
android:orientation="vertical"
android:paddingLeft="32dp"
diff --git a/wikipedia/res/values/colors.xml b/wikipedia/res/values/colors.xml
index c78df57..2154e0c 100644
--- a/wikipedia/res/values/colors.xml
+++ b/wikipedia/res/values/colors.xml
@@ -32,8 +32,7 @@
<color name="button_light">#ff777777</color>
<color name="window_background_light">#fff2f2f2</color>
<color name="page_background_light">#ffffffff</color>
- <color name="actionbar_background_light">#ffffffff</color>
- <color name="actionbar_line_light">#ffc0c0c0</color>
+ <color name="actionbar_background_light">#ffe0e0e0</color>
<color name="search_background_light">#ffffffff</color>
<color name="toc_background_light">#ffffffff</color>
<color name="toc_section_text_light">#ff333333</color>
@@ -47,8 +46,7 @@
<color name="button_dark">#ff2B6FB2</color>
<color name="window_background_dark">#ff000000</color>
<color name="page_background_dark">#ff000000</color>
- <color name="actionbar_background_dark">#ff303030</color>
- <color name="actionbar_line_dark">#ff606060</color>
+ <color name="actionbar_background_dark">#ff505050</color>
<color name="search_background_dark">#ff303030</color>
<color name="toc_background_dark">#ff0C0C0C</color>
<color name="toc_section_text_dark">#ffd0d0d0</color>
diff --git a/wikipedia/res/values/dimens.xml b/wikipedia/res/values/dimens.xml
index 2828a86..eb3a39d 100644
--- a/wikipedia/res/values/dimens.xml
+++ b/wikipedia/res/values/dimens.xml
@@ -7,9 +7,6 @@
<dimen name="corner_radius_smaller">2dp</dimen>
- <!-- Default ActionBar height -->
- <dimen name="actionBarHeight">48dp</dimen>
-
<!-- Default font size for WebView text based on system settings -->
<dimen name="textSize">16sp</dimen>
diff --git a/wikipedia/res/values/styles_wikidark.xml
b/wikipedia/res/values/styles_wikidark.xml
index 744e02b..17ca020 100644
--- a/wikipedia/res/values/styles_wikidark.xml
+++ b/wikipedia/res/values/styles_wikidark.xml
@@ -1,11 +1,9 @@
<resources>
<style name="Theme.WikiDark" parent="Theme.AppCompat">
- <item
name="android:actionBarItemBackground">@drawable/selectable_item_background</item>
- <item
name="android:actionBarStyle">@style/ActionBar.Solid.WikiDark</item>
- <item name="actionBarStyle">@style/ActionBar.Solid.WikiDark</item>
+ <item name="windowActionModeOverlay">true</item>
+ <item name="toolbarStyle">@style/Toolbar.WikiDark</item>
<item
name="android:dropDownListViewStyle">@style/DropDownListView.WikiDark</item>
- <item
name="android:actionDropDownStyle">@style/DropDownNav.WikiDark</item>
<item name="popupMenuStyle">@style/PopupMenu.WikiDark</item>
<item name="android:popupMenuStyle">@style/PopupMenu.WikiDark</item>
<item
name="android:windowBackground">@color/window_background_dark</item>
@@ -19,7 +17,6 @@
<item name="edit_text_color">@color/edit_text_dark</item>
<item name="link_color">@color/link_dark</item>
<item
name="abusefilter_background_color">@color/abusefilter_background_dark</item>
- <item name="actionbar_drawable">@drawable/actionbar_themedark</item>
<item
name="ic_find_previous_drawable">@drawable/ic_find_previous_dark</item>
<item name="ic_find_next_drawable">@drawable/ic_find_next_dark</item>
<item name="lead_image_drawable">@drawable/lead_default_dark</item>
@@ -27,18 +24,14 @@
<item name="list_separator_color">@color/list_separator_dark</item>
</style>
- <style name="ActionBar.Solid.WikiDark"
parent="@style/Widget.AppCompat.ActionBar.Solid">
- <item name="android:background">@drawable/actionbar_themedark</item>
- <item name="android:progressBarPadding">0dp</item>
- <item name="progressBarPadding">0dp</item>
+ <style name="Toolbar.WikiDark" parent="@style/Widget.AppCompat.Toolbar">
+ <item name="android:background">?attr/actionbar_background_color</item>
+ <item name="android:navigationIcon">?attr/homeAsUpIndicator</item>
+ <item name="navigationIcon">?attr/homeAsUpIndicator</item>
</style>
<style name="DropDownListView.WikiDark"
parent="@style/Widget.AppCompat.ListView.DropDown">
<item
name="android:listSelector">@drawable/selectable_item_background</item>
- </style>
-
- <style name="DropDownNav.WikiDark"
parent="@style/Widget.AppCompat.Spinner.DropDown.ActionBar">
- <item
name="android:dropDownSelector">@drawable/selectable_item_background</item>
</style>
<style name="PopupMenu.WikiDark"
parent="@style/Widget.AppCompat.ListPopupWindow">
diff --git a/wikipedia/res/values/styles_wikilight.xml
b/wikipedia/res/values/styles_wikilight.xml
index e1063cf..942aea8 100644
--- a/wikipedia/res/values/styles_wikilight.xml
+++ b/wikipedia/res/values/styles_wikilight.xml
@@ -1,11 +1,9 @@
<resources>
<style name="Theme.WikiLight" parent="Theme.AppCompat.Light">
- <item
name="android:actionBarItemBackground">@drawable/selectable_item_background</item>
- <item
name="android:actionBarStyle">@style/ActionBar.Solid.WikiLight</item>
- <item name="actionBarStyle">@style/ActionBar.Solid.WikiLight</item>
+ <item name="windowActionModeOverlay">true</item>
+ <item name="toolbarStyle">@style/Toolbar.WikiLight</item>
<item
name="android:dropDownListViewStyle">@style/DropDownListView.WikiLight</item>
- <item
name="android:actionDropDownStyle">@style/DropDownNav.WikiLight</item>
<item
name="android:windowBackground">@color/window_background_light</item>
<item
name="window_background_color">@color/window_background_light</item>
<item name="page_background_color">@color/page_background_light</item>
@@ -17,7 +15,6 @@
<item name="edit_text_color">@color/edit_text_light</item>
<item name="link_color">@color/link_light</item>
<item
name="abusefilter_background_color">@color/abusefilter_background_light</item>
- <item name="actionbar_drawable">@drawable/actionbar_themelight</item>
<item
name="ic_find_previous_drawable">@drawable/ic_find_previous_light</item>
<item name="ic_find_next_drawable">@drawable/ic_find_next_light</item>
<item name="lead_image_drawable">@drawable/lead_default</item>
@@ -25,18 +22,14 @@
<item name="list_separator_color">@color/list_separator_light</item>
</style>
- <style name="ActionBar.Solid.WikiLight"
parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
- <item name="android:background">@drawable/actionbar_themelight</item>
- <item name="android:progressBarPadding">0dp</item>
- <item name="progressBarPadding">0dp</item>
+ <style name="Toolbar.WikiLight" parent="@style/Widget.AppCompat.Toolbar">
+ <item name="android:background">?attr/actionbar_background_color</item>
+ <item name="android:navigationIcon">?attr/homeAsUpIndicator</item>
+ <item name="navigationIcon">?attr/homeAsUpIndicator</item>
</style>
<style name="DropDownListView.WikiLight"
parent="@style/Widget.AppCompat.Light.ListView.DropDown">
<item
name="android:listSelector">@drawable/selectable_item_background</item>
- </style>
-
- <style name="DropDownNav.WikiLight"
parent="@style/Widget.AppCompat.Light.Spinner.DropDown.ActionBar">
- <item
name="android:dropDownSelector">@drawable/selectable_item_background</item>
</style>
</resources>
diff --git a/wikipedia/src/main/java/org/wikipedia/ThemedActionBarActivity.java
b/wikipedia/src/main/java/org/wikipedia/ThemedActionBarActivity.java
index 196e8d0..0a02012 100644
--- a/wikipedia/src/main/java/org/wikipedia/ThemedActionBarActivity.java
+++ b/wikipedia/src/main/java/org/wikipedia/ThemedActionBarActivity.java
@@ -1,56 +1,29 @@
package org.wikipedia;
-import com.nineoldandroids.view.ViewHelper;
-import android.content.res.Resources;
-import android.os.Build;
+import android.app.Activity;
import android.os.Bundle;
-import android.support.v4.view.WindowCompat;
import android.support.v7.app.ActionBarActivity;
-import android.util.TypedValue;
-import android.view.View;
import android.view.ViewConfiguration;
-import android.view.ViewGroup;
-import android.view.Window;
import java.lang.reflect.Field;
public abstract class ThemedActionBarActivity extends ActionBarActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
- onCreate(savedInstanceState, false, false);
- }
-
- public void onCreate(Bundle savedInstanceState, boolean
withActionBarOverlay, boolean withProgressBar) {
super.onCreate(savedInstanceState);
setTheme(WikipediaApp.getInstance().getCurrentTheme());
- if (withProgressBar) {
- supportRequestWindowFeature(Window.FEATURE_PROGRESS);
+ if (getSupportActionBar() != null) {
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
- if (withActionBarOverlay) {
-
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY);
- }
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
forceOverflowMenuIcon(this);
-
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
- //for 2.3 it seems to be necessary to set this explicitly:
-
getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(Utils.getThemedAttributeId(this,
R.attr.actionbar_drawable)));
- }
-
- // Just setting the logo in the AndroidManifest.xml is not enough for
all cases.
- // 1: It doesn't work for GB.
- // 2: (The transition between PageViewFragment and
SearchArticlesFragment makes it temporarily reveal
- // the icon instead of the logo. So, setting the icon dynamically
seems to be the best solution to
- // avoid those issues, while still having a different launcher icon.)
- getSupportActionBar().setIcon(R.drawable.search_w);
}
/**
* Helper function to force the Activity to show the three-dot overflow
icon in its ActionBar.
* @param activity Activity whose overflow icon will be forced.
*/
- private static void forceOverflowMenuIcon(ActionBarActivity activity) {
+ private static void forceOverflowMenuIcon(Activity activity) {
try {
ViewConfiguration config = ViewConfiguration.get(activity);
// Note: this field doesn't exist in 2.3, so those users will need
to tap the physical menu button,
@@ -65,48 +38,5 @@
} catch (Exception ex) {
// multiple exceptions may be thrown above, but it's not super
critical if it fails.
}
- }
-
- /**
- * Helper function to move the built-in ProgressBar that is part of the
ActionBarActivity
- * from the very top of the activity to the bottom of the ActionBar, where
it looks better.
- * Note: this only applies to API >10, since in API 10 the ProgressBar
seems to be really
- * wide, and actually looks better at the top of the activity.
- * @param activity Activity whose ProgressBar to move.
- */
- public static void alignActivityProgressBar(ActionBarActivity activity) {
- ViewGroup actionBar;
- View progressBar;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
- actionBar = (ViewGroup)activity.getWindow()
- .getDecorView()
-
.findViewById(Resources.getSystem().getIdentifier("action_bar_container", "id",
"android"));
- progressBar = activity.getWindow()
- .getDecorView()
-
.findViewById(Resources.getSystem().getIdentifier("progress_horizontal", "id",
"android"));
- TypedValue tv = new TypedValue();
- if
(activity.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
- {
- // get the default height of the ActionBar
- int offsetHeight =
TypedValue.complexToDimensionPixelSize(tv.data,
activity.getResources().getDisplayMetrics());
- // subtract just a little bit, so that the whole ProgressBar
fits at the bottom of the ActionBar
- offsetHeight -= (int)(2 *
(activity.getResources().getDisplayMetrics().density));
- // and modify the offset of the ProgressBar!
- if (actionBar != null && progressBar != null && offsetHeight >
0) {
- ViewHelper.setTranslationY(progressBar, offsetHeight);
- }
- }
- } else {
- // but just in case we'll want to do this in 2.3, this is how to
get the View ids:
- /*
- actionBar = (ViewGroup)activity.getWindow()
- .getDecorView()
-
.findViewById(activity.getResources().getIdentifier("action_bar_container",
"id", activity.getPackageName()));
- progressBar = activity.getWindow()
- .getDecorView()
-
.findViewById(activity.getResources().getIdentifier("progress_horizontal",
"id", activity.getPackageName()));
- */
- }
-
}
}
diff --git a/wikipedia/src/main/java/org/wikipedia/Utils.java
b/wikipedia/src/main/java/org/wikipedia/Utils.java
index 6beef20..8734574 100644
--- a/wikipedia/src/main/java/org/wikipedia/Utils.java
+++ b/wikipedia/src/main/java/org/wikipedia/Utils.java
@@ -7,6 +7,7 @@
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.content.res.TypedArray;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
@@ -588,6 +589,14 @@
return tv.resourceId;
}
+ public static int getActionBarSize(Context context) {
+ final TypedArray styledAttributes =
context.getTheme().obtainStyledAttributes(
+ new int[] { android.R.attr.actionBarSize });
+ int size = (int)styledAttributes.getDimension(0, 0);
+ styledAttributes.recycle();
+ return size;
+ }
+
/**
* Returns the distribution channel for the app from AndroidManifest.xml
* @param ctx
diff --git a/wikipedia/src/main/java/org/wikipedia/page/PageActivity.java
b/wikipedia/src/main/java/org/wikipedia/page/PageActivity.java
index ab8ed89..be8c67e 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/PageActivity.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageActivity.java
@@ -6,6 +6,7 @@
import org.wikipedia.Site;
import org.wikipedia.ThemedActionBarActivity;
import org.wikipedia.Utils;
+import org.wikipedia.ViewAnimations;
import org.wikipedia.WikipediaApp;
import org.wikipedia.events.ChangeTextSizeEvent;
import org.wikipedia.events.ThemeChangeEvent;
@@ -36,16 +37,18 @@
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
-import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.widget.DrawerLayout;
+import android.support.v7.app.ActionBarDrawerToggle;
+import android.support.v7.widget.Toolbar;
import android.text.Html;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import android.widget.ProgressBar;
public class PageActivity extends ThemedActionBarActivity {
public static final String ACTION_PAGE_FOR_TITLE =
"org.wikipedia.page_for_title";
@@ -66,6 +69,14 @@
private DrawerLayout drawerLayout;
private NavDrawerFragment fragmentNavdrawer;
private SearchArticlesFragment searchFragment;
+
+ public static final int PROGRESS_BAR_MAX_VALUE = 10000;
+ private ProgressBar progressBar;
+
+ private View toolbarContainer;
+ public View getToolbarView() {
+ return toolbarContainer;
+ }
private ActionBarDrawerToggle mDrawerToggle;
public ActionBarDrawerToggle getDrawerToggle() {
@@ -108,11 +119,16 @@
@Override
public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState, true, true);
+ super.onCreate(savedInstanceState);
app = (WikipediaApp) getApplicationContext();
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
setContentView(R.layout.activity_main);
+
+ final Toolbar toolbar = (Toolbar) findViewById(R.id.main_toolbar);
+ setSupportActionBar(toolbar);
+
+ toolbarContainer = findViewById(R.id.main_toolbar_container);
bus = app.getBus();
bus.register(this);
@@ -122,11 +138,13 @@
searchFragment = (SearchArticlesFragment)
getSupportFragmentManager().findFragmentById(R.id.search_fragment);
fragmentContainerView = findViewById(R.id.content_fragment_container);
+ progressBar = (ProgressBar)findViewById(R.id.main_progressbar);
+ progressBar.setMax(PROGRESS_BAR_MAX_VALUE);
+ updateProgressBar(false, true, 0);
mDrawerToggle = new ActionBarDrawerToggle(
this, /* host Activity */
drawerLayout, /* DrawerLayout object */
- R.drawable.ic_drawer, /* nav drawer icon to replace 'Up'
caret */
R.string.app_name, /* "open drawer" description */
R.string.app_name /* "close drawer" description */
) {
@@ -159,10 +177,8 @@
fragmentNavdrawer.setupDynamicItems();
oncePerSlideLock = true;
}
- // and make sure the ActionBar is showing
- if (!getSupportActionBar().isShowing()) {
- getSupportActionBar().show();
- }
+ // and make sure the Toolbar is showing
+ showToolbar();
}
@Override
@@ -258,26 +274,23 @@
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
- ThemedActionBarActivity.alignActivityProgressBar(this);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
- ThemedActionBarActivity.alignActivityProgressBar(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (searchFragment != null && !isSearching()) {
getMenuInflater().inflate(R.menu.menu_main, menu);
+
app.adjustDrawableToTheme(menu.findItem(R.id.menu_search).getIcon());
}
-
-
app.adjustDrawableToTheme(getResources().getDrawable(R.drawable.ic_drawer));
-
app.adjustDrawableToTheme(getResources().getDrawable(R.drawable.search_w));
-
app.adjustDrawableToTheme(getResources().getDrawable(R.drawable.search));
-
+ View wLogo = findViewById(R.id.main_w_logo);
+ app.adjustDrawableToTheme(wLogo.getBackground());
+ wLogo.setVisibility(isSearching() ? View.GONE : View.VISIBLE);
return super.onCreateOptionsMenu(menu);
}
@@ -300,6 +313,10 @@
}
// Handle other action bar items...
return super.onOptionsItemSelected(item);
+ }
+
+ public void showToolbar() {
+ ViewAnimations.ensureTranslationY(toolbarContainer, 0);
}
/**
@@ -343,15 +360,12 @@
* @param value Value of the progress bar (may be between 0 and 10000).
Ignored if the
* progress bar is indeterminate.
*/
- public void updateProgressBar(final boolean visible, final boolean
indeterminate, final int value) {
- fragmentContainerView.post(new Runnable() {
- @Override
- public void run() {
- setSupportProgressBarIndeterminate(indeterminate);
- setSupportProgress(value);
- setSupportProgressBarVisibility(visible);
- }
- });
+ public void updateProgressBar(boolean visible, boolean indeterminate, int
value) {
+ progressBar.setIndeterminate(indeterminate);
+ if (!indeterminate) {
+ progressBar.setProgress(value);
+ }
+ progressBar.setVisibility(visible ? View.VISIBLE : View.GONE);
}
/**
@@ -393,9 +407,7 @@
trans.commit();
// and make sure the ActionBar is visible
- if (!getSupportActionBar().isShowing()) {
- getSupportActionBar().show();
- }
+ showToolbar();
//also make sure the progress bar is not showing
updateProgressBar(false, true, 0);
}
@@ -409,9 +421,7 @@
// make sure the ActionBar is showing, since we could be currently
scrolled down far enough
// within a Page fragment that the ActionBar is hidden, and if the
previous fragment was
// a different type of fragment (e.g. History), the ActionBar would
remain hidden.
- if (!getSupportActionBar().isShowing()) {
- getSupportActionBar().show();
- }
+ showToolbar();
//also make sure the progress bar is not showing
updateProgressBar(false, true, 0);
}
diff --git
a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
index 24a9eaa..5e41362 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
@@ -81,8 +81,6 @@
private int state = STATE_NO_FETCH;
private int subState = SUBSTATE_NONE;
- private static final int MAX_PROGRESS_VALUE = 10000;
-
/**
* Whether to save the full page content as soon as it's loaded.
* Used in the following cases:
@@ -228,7 +226,8 @@
}
private void displayNonLeadSection(int index) {
- getActivity().updateProgressBar(true, false, MAX_PROGRESS_VALUE /
page.getSections().size() * index);
+ getActivity().updateProgressBar(true, false,
PageActivity.PROGRESS_BAR_MAX_VALUE
+ / page.getSections().size() * index);
try {
JSONObject wrapper = new JSONObject();
@@ -376,7 +375,7 @@
editHandler = new EditHandler(parentFragment, bridge);
- new SearchBarHideHandler(webView, getActivity());
+ new SearchBarHideHandler(webView, getActivity().getToolbarView());
imagesContainer = (ViewGroup)
parentFragment.getView().findViewById(R.id.page_images_container);
leadImagesHandler = new LeadImagesHandler(parentFragment, bridge,
webView, imagesContainer);
@@ -638,9 +637,7 @@
public void onDestroyActionMode(ActionMode mode) {
findInPageActionMode = null;
webView.clearMatches();
- if (!pageActivity.getSupportActionBar().isShowing()) {
- pageActivity.getSupportActionBar().show();
- }
+ pageActivity.showToolbar();
Utils.hideSoftKeyboard(pageActivity);
}
});
diff --git a/wikipedia/src/main/java/org/wikipedia/page/ToCHandler.java
b/wikipedia/src/main/java/org/wikipedia/page/ToCHandler.java
index 27f2b77..7739ed6 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/ToCHandler.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/ToCHandler.java
@@ -102,9 +102,7 @@
public void onDrawerSlide(View drawerView, float slideOffset) {
super.onDrawerSlide(drawerView, slideOffset);
// make sure the ActionBar is showing
- if (!parentActivity.getSupportActionBar().isShowing()) {
- parentActivity.getSupportActionBar().show();
- }
+ ((PageActivity)parentActivity).showToolbar();
}
});
}
diff --git
a/wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
b/wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
index e85dc91..1010eea 100644
---
a/wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
+++
b/wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
@@ -81,7 +81,7 @@
* Number of pixels to offset the WebView content (in addition to page
title height),
* when lead images are disabled.
*/
- private static final int DISABLED_OFFSET_DP = 80;
+ private static final int DISABLED_OFFSET_DP = 88;
/**
* Whether lead images are enabled, overall. They will be disabled
automatically
@@ -339,7 +339,7 @@
int titleBottomPadding = 0;
if (isMainPage) {
- titleContainerHeight =
(int)(parentFragment.getResources().getDimension(R.dimen.actionBarHeight) /
displayDensity);
+ titleContainerHeight =
(int)(Utils.getActionBarSize(parentFragment.getActivity()) / displayDensity);
imageContainer.setVisibility(View.INVISIBLE);
} else if (!leadImagesEnabled) {
// ok, we're not going to show lead images, so we need to make some
diff --git
a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
index 40ab863..cc0b28f 100644
--- a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
+++ b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
@@ -13,8 +13,11 @@
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Typeface;
+import android.app.Activity;
+import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentActivity;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.SearchView;
import android.text.TextUtils;
@@ -132,7 +135,7 @@
});
app.adjustDrawableToTheme(((ImageView)deleteButton).getDrawable());
- recentSearchesFragment =
(RecentSearchesFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.search_panel_recent);
+ recentSearchesFragment =
(RecentSearchesFragment)getChildFragmentManager().findFragmentById(R.id.search_panel_recent);
searchTypesContainer =
parentLayout.findViewById(R.id.search_panel_types);
buttonTitleSearch =
parentLayout.findViewById(R.id.button_search_title);
@@ -159,7 +162,7 @@
}
});
- titleSearchFragment =
(TitleSearchFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.fragment_search_title);
+ titleSearchFragment =
(TitleSearchFragment)getChildFragmentManager().findFragmentById(R.id.fragment_search_title);
titleSearchFragment.setOnNoResultsListener(new
TitleSearchFragment.OnNoResultsListener() {
@Override
public void onNoResults() {
@@ -178,7 +181,7 @@
}
});
- fullSearchFragment =
(FullSearchFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.fragment_search_full);
+ fullSearchFragment =
(FullSearchFragment)getChildFragmentManager().findFragmentById(R.id.fragment_search_full);
//make sure we're hidden by default
searchContainerView.setVisibility(View.GONE);
@@ -190,6 +193,11 @@
}
@Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ }
+
+ @Override
public void onDestroyView() {
super.onDestroyView();
app.getBus().unregister(this);
diff --git
a/wikipedia/src/main/java/org/wikipedia/search/SearchBarHideHandler.java
b/wikipedia/src/main/java/org/wikipedia/search/SearchBarHideHandler.java
index a1ec532..2eafccd 100644
--- a/wikipedia/src/main/java/org/wikipedia/search/SearchBarHideHandler.java
+++ b/wikipedia/src/main/java/org/wikipedia/search/SearchBarHideHandler.java
@@ -1,36 +1,65 @@
package org.wikipedia.search;
-import android.support.v7.app.ActionBarActivity;
+import android.view.View;
+
+import com.nineoldandroids.view.ViewHelper;
+
+import org.wikipedia.ViewAnimations;
import org.wikipedia.views.ObservableWebView;
-public class SearchBarHideHandler implements
ObservableWebView.OnScrollChangeListener {
+public class SearchBarHideHandler implements
ObservableWebView.OnScrollChangeListener,
ObservableWebView.OnUpOrCancelMotionEventListener,
ObservableWebView.OnDownMotionEventListener {
private final ObservableWebView webview;
- private final ActionBarActivity activity;
+ private final View quickReturnView;
- public SearchBarHideHandler(ObservableWebView webview, ActionBarActivity
activity) {
+ public SearchBarHideHandler(ObservableWebView webview, View
quickReturnView) {
this.webview = webview;
- this.activity = activity;
+ this.quickReturnView = quickReturnView;
webview.addOnScrollChangeListener(this);
+ webview.addOnDownMotionEventListener(this);
+ webview.addOnUpOrCancelMotionEventListener(this);
}
@Override
public void onScrollChanged(int oldScrollY, int scrollY) {
if (scrollY <= webview.getHeight()) {
- // For the first screenful, ensure it's always shown
- if (!activity.getSupportActionBar().isShowing()) {
- activity.getSupportActionBar().show();
- }
+ // For the first screenful, ensure it always exists.
+ ViewAnimations.ensureTranslationY(quickReturnView, 0);
return;
}
+ int animMargin;
if (oldScrollY > scrollY) {
- if (!activity.getSupportActionBar().isShowing()) {
- activity.getSupportActionBar().show();
- }
+ int minMargin = 0;
+ int scrollDelta = oldScrollY - scrollY;
+ int newMargin = (int) ViewHelper.getTranslationY(quickReturnView)
+ scrollDelta;
+ animMargin = Math.min(minMargin, newMargin);
} else {
- if (activity.getSupportActionBar().isShowing()) {
- activity.getSupportActionBar().hide();
+ // scroll downn!
+ int minMargin = -quickReturnView.getHeight();
+ int scrollDelta = scrollY - oldScrollY;
+ int newMargin = (int)ViewHelper.getTranslationY(quickReturnView) -
scrollDelta;
+ animMargin = Math.max(minMargin, newMargin);
+ }
+ ViewHelper.setTranslationY(quickReturnView, animMargin);
+ }
+
+ @Override
+ public void onUpOrCancelMotionEvent() {
+ int transY = (int)ViewHelper.getTranslationY(quickReturnView);
+ int height = quickReturnView.getHeight();
+ if (transY != 0 && transY > -height) {
+ if (transY > -height / 2) {
+ // Fully display it
+ ViewAnimations.ensureTranslationY(quickReturnView, 0);
+ } else {
+ // Fully hide it
+ ViewAnimations.ensureTranslationY(quickReturnView, -height);
}
}
}
+
+ @Override
+ public void onDownMotionEvent() {
+ // Don't do anything for now
+ }
}
diff --git
a/wikipedia/src/main/java/org/wikipedia/settings/PreferenceActivityWithBack.java
b/wikipedia/src/main/java/org/wikipedia/settings/PreferenceActivityWithBack.java
index 500eece..bb25445 100644
---
a/wikipedia/src/main/java/org/wikipedia/settings/PreferenceActivityWithBack.java
+++
b/wikipedia/src/main/java/org/wikipedia/settings/PreferenceActivityWithBack.java
@@ -1,6 +1,5 @@
package org.wikipedia.settings;
-import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.view.MenuItem;
@@ -11,11 +10,6 @@
public void onCreate(Bundle savedInstanceState) {
setTheme(WikipediaApp.getInstance().getCurrentTheme());
super.onCreate(savedInstanceState);
-
- // Hmm. Can't use ActionBarActivity?
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
- getActionBar().setDisplayHomeAsUpEnabled(true);
- }
}
public boolean onMenuItemSelected(int featureId, MenuItem item) {
--
To view, visit https://gerrit.wikimedia.org/r/173290
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9a00c49dd2544d7d2b1990028db2fb8ee1ce97d4
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits