jenkins-bot has submitted this change and it was merged.
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.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 README.mediawiki
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
34 files changed, 186 insertions(+), 212 deletions(-)
Approvals:
BearND: Looks good to me, approved
jenkins-bot: Verified
diff --git a/README.mediawiki b/README.mediawiki
index 8937365..e895d99 100644
--- a/README.mediawiki
+++ b/README.mediawiki
@@ -32,7 +32,7 @@
Now, and any time you open a new Terminal, the $ANDROID_HOME variable will be
set automatically and you'll be able to run command line tools pertinent to
Android software development, such as the tool aptly named "android".
4. Speaking of which, in a new Terminal window, run the following commands:
- android update sdk -u --filter
"tools,platform-tools,build-tools-20.0.0,android-19,extra-android-m2repository"
+ android update sdk -u --filter
"tools,platform-tools,build-tools-21.1.1,android-21,extra-android-m2repository"
After you accept the licenses, this will download and install the necessary
SDK components for you to build the app.
@@ -46,7 +46,6 @@
This will load a GUI tool called "Android SDK Manager" for managing the
Android-related packages necessary for Android programming.
You may want to install some more packages from there.
-No need for the API level 20 (L preview or Android Wear) yet. That might be
useful in the future though.
=== Optional: Install Android Emulator ===
@@ -54,7 +53,7 @@
5. If planning to use Android emulators, consider adding the "System Image"
packages of various API levels in in the Android SDK Manager.
Example:
-* ARM EABI v7a System Image (API 19)
+* ARM EABI v7a System Image (API 21)
You'll probably also want to install the HAXM installer package from the
Extras category at the bottom.
* Intel X86 Emulator Accelerator (HAXM installer)
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..39598ab 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.1'
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.0'
+ compile 'com.android.support:appcompat-v7:21.0.0'
}
// 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..687d466 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;
@@ -589,6 +590,22 @@
}
/**
+ * Returns the height of the ActionBar in the current activity. The system
controls the
+ * height of the ActionBar, which may be slightly different depending on
screen orientation,
+ * and device version.
+ * @param context Context used for retrieving the height attribute.
+ * @return Height of the ActionBar.
+ */
+ public static int getActionBarSize(Context context) {
+ final TypedArray styledAttributes =
context.getTheme().obtainStyledAttributes(new int[] {
+ android.support.v7.appcompat.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
* @return The channel (the empty string if not defined)
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 41f4e76..04c5845 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragmentInternal.java
@@ -82,8 +82,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:
@@ -230,7 +228,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();
@@ -378,7 +377,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);
@@ -640,9 +639,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 1f99a6d..0be3c57 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
@@ -330,7 +330,7 @@
int titleBottomPadding = 0;
if (isMainPage) {
- titleContainerHeight =
(int)(parentFragment.getResources().getDimension(R.dimen.actionBarHeight) /
displayDensity);
+ titleContainerHeight =
(int)(Utils.getActionBarSize(parentFragment.getActivity()) / displayDensity);
// hide everything
image1.setVisibility(View.GONE);
imagePlaceholder.setVisibility(View.GONE);
diff --git
a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
index 40ab863..f14bb3a 100644
--- a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
+++ b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
@@ -132,7 +132,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 +159,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 +178,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);
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: merged
Gerrit-Change-Id: I9a00c49dd2544d7d2b1990028db2fb8ee1ce97d4
Gerrit-PatchSet: 4
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits