diff options
76 files changed, 1091 insertions, 1105 deletions
| diff --git a/libraries/ActionBarSherlock/AndroidManifest.xml b/libraries/ActionBarSherlock/AndroidManifest.xml index 7b8a84824..ca0fb7cee 100644 --- a/libraries/ActionBarSherlock/AndroidManifest.xml +++ b/libraries/ActionBarSherlock/AndroidManifest.xml @@ -1,6 +1,5 @@  <?xml version="1.0" encoding="utf-8"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="100" android:versionName="4.2.0" package="com.actionbarsherlock"> - -    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="16"/> - +<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="440" android:versionName="4.4.0" package="com.actionbarsherlock"> +  <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="17"/> +  <application/>  </manifest> diff --git a/libraries/ActionBarSherlock/build.gradle b/libraries/ActionBarSherlock/build.gradle index 102d66946..41bbe1d9b 100644 --- a/libraries/ActionBarSherlock/build.gradle +++ b/libraries/ActionBarSherlock/build.gradle @@ -1,27 +1,18 @@ -buildscript { -    repositories { -        mavenCentral() -    } -    dependencies { -        classpath 'com.android.tools.build:gradle:0.4.1' -    } -} -  apply plugin: 'android-library'  dependencies { -    compile files('libs/android-support-v4.jar') +  compile 'com.android.support:support-v4:18.0.+'  }  android { -    compileSdkVersion 17 -    buildToolsVersion '17' +  compileSdkVersion 14 +  buildToolsVersion '17.0.0' -    sourceSets { -        main { -            manifest.srcFile 'AndroidManifest.xml' -            java.srcDirs = ['src'] -            res.srcDirs = ['res'] -        } +  sourceSets { +    main { +      manifest.srcFile 'AndroidManifest.xml' +      java.srcDirs = ['src'] +      res.srcDirs = ['res']      } +  }  } diff --git a/libraries/ActionBarSherlock/build.xml b/libraries/ActionBarSherlock/build.xml deleted file mode 100644 index a10a91491..000000000 --- a/libraries/ActionBarSherlock/build.xml +++ /dev/null @@ -1,92 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project name="MainActivity" default="help"> - -    <!-- The local.properties file is created and updated by the 'android' tool. -         It contains the path to the SDK. It should *NOT* be checked into -         Version Control Systems. --> -    <property file="local.properties" /> - -    <!-- The ant.properties file can be created by you. It is only edited by the -         'android' tool to add properties to it. -         This is the place to change some Ant specific build properties. -         Here are some properties you may want to change/update: - -         source.dir -             The name of the source directory. Default is 'src'. -         out.dir -             The name of the output directory. Default is 'bin'. - -         For other overridable properties, look at the beginning of the rules -         files in the SDK, at tools/ant/build.xml - -         Properties related to the SDK location or the project target should -         be updated using the 'android' tool with the 'update' action. - -         This file is an integral part of the build system for your -         application and should be checked into Version Control Systems. - -         --> -    <property file="ant.properties" /> - -    <!-- if sdk.dir was not set from one of the property file, then -         get it from the ANDROID_HOME env var. -         This must be done before we load project.properties since -         the proguard config can use sdk.dir --> -    <property environment="env" /> -    <condition property="sdk.dir" value="${env.ANDROID_HOME}"> -        <isset property="env.ANDROID_HOME" /> -    </condition> - -    <!-- The project.properties file is created and updated by the 'android' -         tool, as well as ADT. - -         This contains project specific properties such as project target, and library -         dependencies. Lower level build properties are stored in ant.properties -         (or in .classpath for Eclipse projects). - -         This file is an integral part of the build system for your -         application and should be checked into Version Control Systems. --> -    <loadproperties srcFile="project.properties" /> - -    <!-- quick check on sdk.dir --> -    <fail -            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable." -            unless="sdk.dir" -    /> - -    <!-- -        Import per project custom build rules if present at the root of the project. -        This is the place to put custom intermediary targets such as: -            -pre-build -            -pre-compile -            -post-compile (This is typically used for code obfuscation. -                           Compiled code location: ${out.classes.absolute.dir} -                           If this is not done in place, override ${out.dex.input.absolute.dir}) -            -post-package -            -post-build -            -pre-clean -    --> -    <import file="custom_rules.xml" optional="true" /> - -    <!-- Import the actual build file. - -         To customize existing targets, there are two options: -         - Customize only one target: -             - copy/paste the target into this file, *before* the -               <import> task. -             - customize it to your needs. -         - Customize the whole content of build.xml -             - copy/paste the content of the rules files (minus the top node) -               into this file, replacing the <import> task. -             - customize to your needs. - -         *********************** -         ****** IMPORTANT ****** -         *********************** -         In all cases you must update the value of version-tag below to read 'custom' instead of an integer, -         in order to avoid having your file be overridden by tools such as "android update project" -    --> -    <!-- version-tag: 1 --> -    <import file="${sdk.dir}/tools/ant/build.xml" /> - -</project> diff --git a/libraries/ActionBarSherlock/pom.xml b/libraries/ActionBarSherlock/pom.xml index 3b6ce40ce..57d8d7c1c 100644 --- a/libraries/ActionBarSherlock/pom.xml +++ b/libraries/ActionBarSherlock/pom.xml @@ -1,148 +1,141 @@  <?xml version="1.0" encoding="UTF-8"?>  <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> -	<modelVersion>4.0.0</modelVersion> +  <modelVersion>4.0.0</modelVersion> -	<artifactId>actionbarsherlock</artifactId> -	<name>ActionBarSherlock</name> -	<packaging>apklib</packaging> +  <parent> +    <groupId>com.actionbarsherlock</groupId> +    <artifactId>parent</artifactId> +    <version>4.4.0</version> +    <relativePath>../pom.xml</relativePath> +  </parent> -	<parent> -		<groupId>com.actionbarsherlock</groupId> -		<artifactId>parent</artifactId> -		<version>4.2.0</version> -		<relativePath>../pom.xml</relativePath> -	</parent> +  <artifactId>actionbarsherlock</artifactId> +  <name>ActionBarSherlock</name> +  <packaging>apklib</packaging> -	<dependencies> -		<dependency> -			<groupId>com.google.android</groupId> -			<artifactId>android</artifactId> -			<scope>provided</scope> -		</dependency> -		<dependency> -			<groupId>com.google.android</groupId> -			<artifactId>support-v4</artifactId> -		</dependency> +  <dependencies> +    <dependency> +      <groupId>com.google.android</groupId> +      <artifactId>android</artifactId> +      <scope>provided</scope> +    </dependency> +    <dependency> +      <groupId>com.google.android</groupId> +      <artifactId>support-v4</artifactId> +    </dependency> -		<dependency> -			<groupId>junit</groupId> -			<artifactId>junit</artifactId> -			<scope>test</scope> -		</dependency> -	</dependencies> +    <dependency> +      <groupId>junit</groupId> +      <artifactId>junit</artifactId> +      <scope>test</scope> +    </dependency> +    <dependency> +      <groupId>org.easytesting</groupId> +      <artifactId>fest-assert-core</artifactId> +      <scope>test</scope> +    </dependency> +    <dependency> +      <groupId>org.robolectric</groupId> +      <artifactId>robolectric</artifactId> +      <scope>test</scope> +    </dependency> +  </dependencies> -	<build> -		<sourceDirectory>src</sourceDirectory> -		<testSourceDirectory>test</testSourceDirectory> +  <build> +    <sourceDirectory>src</sourceDirectory> +    <testSourceDirectory>test</testSourceDirectory> -		<plugins> -			<plugin> -				<groupId>com.jayway.maven.plugins.android.generation2</groupId> -				<artifactId>android-maven-plugin</artifactId> -				<extensions>true</extensions> -				<configuration> -					<nativeLibrariesDirectory>ignored</nativeLibrariesDirectory> -				</configuration> -			</plugin> +    <plugins> +      <plugin> +        <groupId>com.jayway.maven.plugins.android.generation2</groupId> +        <artifactId>android-maven-plugin</artifactId> +        <extensions>true</extensions> +      </plugin> -			<plugin> -				<groupId>org.apache.maven.plugins</groupId> -				<artifactId>maven-javadoc-plugin</artifactId> -				<configuration> -					<skip>true</skip> -				</configuration> -			</plugin> +      <plugin> +        <groupId>org.apache.maven.plugins</groupId> +        <artifactId>maven-javadoc-plugin</artifactId> +        <configuration> +          <skip>true</skip> +        </configuration> +      </plugin> -			<plugin> -				<groupId>com.google.code.maven-replacer-plugin</groupId> -				<artifactId>maven-replacer-plugin</artifactId> -				<version>1.4.0</version> -				<executions> -					<execution> -						<phase>process-sources</phase> -						<goals> -							<goal>replace</goal> -						</goals> -					</execution> -				</executions> -				<configuration> -					<ignoreMissingFile>false</ignoreMissingFile> -					<file>target/generated-sources/r/com/actionbarsherlock/R.java</file> -					<outputFile>target/generated-sources/r/com/actionbarsherlock/R.java</outputFile> -					<regex>false</regex> -					<token>static final int</token> -					<value>static int</value> -				</configuration> -			</plugin> +      <plugin> +        <groupId>com.google.code.maven-replacer-plugin</groupId> +        <artifactId>maven-replacer-plugin</artifactId> +        <executions> +          <execution> +            <phase>process-sources</phase> +            <goals> +              <goal>replace</goal> +            </goals> +          </execution> +        </executions> +        <configuration> +          <ignoreMissingFile>false</ignoreMissingFile> +          <file>target/generated-sources/r/com/actionbarsherlock/R.java</file> +          <outputFile>target/generated-sources/r/com/actionbarsherlock/R.java</outputFile> +          <regex>false</regex> +          <token>static final int</token> +          <value>static int</value> +        </configuration> +      </plugin> -			<plugin> -				<groupId>org.apache.maven.plugins</groupId> -				<artifactId>maven-checkstyle-plugin</artifactId> -				<configuration> -					<configLocation>../checkstyle.xml</configLocation> -				</configuration> -				<executions> -					<execution> -						<phase>verify</phase> -						<goals> -							<goal>checkstyle</goal> -						</goals> -					</execution> -				</executions> -			</plugin> +      <plugin> +        <groupId>org.codehaus.mojo</groupId> +        <artifactId>build-helper-maven-plugin</artifactId> +        <executions> +          <execution> +            <phase>package</phase> +            <goals> +              <goal>attach-artifact</goal> +            </goals> +            <configuration> +              <artifacts> +                <artifact> +                  <type>jar</type> +                  <file>${project.build.directory}/${project.build.finalName}.jar</file> +                </artifact> +                <artifact> +                  <type>aar</type> +                  <file>${project.basedir}/build/libs/${project.artifactId}-${gradle.version}.aar</file> +                </artifact> +              </artifacts> +            </configuration> +          </execution> +        </executions> +      </plugin> +    </plugins> -			<plugin> -				<groupId>org.codehaus.mojo</groupId> -				<artifactId>build-helper-maven-plugin</artifactId> -				<version>1.7</version> -				<executions> -					<execution> -						<phase>package</phase> -						<goals> -							<goal>attach-artifact</goal> -						</goals> -						<configuration> -							<artifacts> -								<artifact> -									<type>jar</type> -									<file>${project.build.directory}/${project.build.finalName}.jar</file> -								</artifact> -							</artifacts> -						</configuration> -					</execution> -				</executions> -			</plugin> -		</plugins> - -		<pluginManagement> -			<plugins> -				<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.--> -				<plugin> -					<groupId>org.eclipse.m2e</groupId> -					<artifactId>lifecycle-mapping</artifactId> -					<version>1.0.0</version> -					<configuration> -						<lifecycleMappingMetadata> -							<pluginExecutions> -								<pluginExecution> -									<pluginExecutionFilter> -										<groupId>com.google.code.maven-replacer-plugin</groupId> -										<artifactId>maven-replacer-plugin</artifactId> -										<versionRange>[1.4.0,)</versionRange> -										<goals> -											<goal>replace</goal> -										</goals> -									</pluginExecutionFilter> -									<action> -										<ignore /> -									</action> -								</pluginExecution> -							</pluginExecutions> -						</lifecycleMappingMetadata> -					</configuration> -				</plugin> -			</plugins> -		</pluginManagement> -	</build> +    <pluginManagement> +      <plugins> +        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.--> +        <plugin> +          <groupId>org.eclipse.m2e</groupId> +          <artifactId>lifecycle-mapping</artifactId> +          <version>1.0.0</version> +          <configuration> +            <lifecycleMappingMetadata> +              <pluginExecutions> +                <pluginExecution> +                  <pluginExecutionFilter> +                    <groupId>com.google.code.maven-replacer-plugin</groupId> +                    <artifactId>maven-replacer-plugin</artifactId> +                    <versionRange>[1.4.0,)</versionRange> +                    <goals> +                      <goal>replace</goal> +                    </goals> +                  </pluginExecutionFilter> +                  <action> +                    <ignore /> +                  </action> +                </pluginExecution> +              </pluginExecutions> +            </lifecycleMappingMetadata> +          </configuration> +        </plugin> +      </plugins> +    </pluginManagement> +  </build>  </project> diff --git a/libraries/ActionBarSherlock/proguard-project.txt b/libraries/ActionBarSherlock/proguard-project.txt deleted file mode 100644 index f2fe1559a..000000000 --- a/libraries/ActionBarSherlock/proguard-project.txt +++ /dev/null @@ -1,20 +0,0 @@ -# To enable ProGuard in your project, edit project.properties -# to define the proguard.config property as described in that file. -# -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in ${sdk.dir}/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the ProGuard -# include property in project.properties. -# -# For more details, see -#   http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -#   public *; -#} diff --git a/libraries/ActionBarSherlock/res/drawable-hdpi/abs__dialog_full_holo_dark.9.png b/libraries/ActionBarSherlock/res/drawable-hdpi/abs__dialog_full_holo_dark.9.pngBinary files differ deleted file mode 100644 index 79e56f522..000000000 --- a/libraries/ActionBarSherlock/res/drawable-hdpi/abs__dialog_full_holo_dark.9.png +++ /dev/null diff --git a/libraries/ActionBarSherlock/res/drawable-hdpi/abs__dialog_full_holo_light.9.png b/libraries/ActionBarSherlock/res/drawable-hdpi/abs__dialog_full_holo_light.9.pngBinary files differ deleted file mode 100644 index e029f210b..000000000 --- a/libraries/ActionBarSherlock/res/drawable-hdpi/abs__dialog_full_holo_light.9.png +++ /dev/null diff --git a/libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_commit_search_api_holo_dark.png b/libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_commit_search_api_holo_dark.pngBinary files differ new file mode 100644 index 000000000..83f36a94c --- /dev/null +++ b/libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_commit_search_api_holo_dark.png diff --git a/libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_commit_search_api_holo_light.png b/libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_commit_search_api_holo_light.pngBinary files differ new file mode 100644 index 000000000..a3cc21e6b --- /dev/null +++ b/libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_commit_search_api_holo_light.png diff --git a/libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_search.png b/libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_search.pngBinary files differ index 4be72f108..bf8bd6670 100644 --- a/libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_search.png +++ b/libraries/ActionBarSherlock/res/drawable-hdpi/abs__ic_search.png diff --git a/libraries/ActionBarSherlock/res/drawable-hdpi/abs__toast_frame.9.png b/libraries/ActionBarSherlock/res/drawable-hdpi/abs__toast_frame.9.pngBinary files differ new file mode 100644 index 000000000..ad2cb5a96 --- /dev/null +++ b/libraries/ActionBarSherlock/res/drawable-hdpi/abs__toast_frame.9.png diff --git a/libraries/ActionBarSherlock/res/drawable-mdpi/abs__dialog_full_holo_dark.9.png b/libraries/ActionBarSherlock/res/drawable-mdpi/abs__dialog_full_holo_dark.9.pngBinary files differ deleted file mode 100644 index fb3660eab..000000000 --- a/libraries/ActionBarSherlock/res/drawable-mdpi/abs__dialog_full_holo_dark.9.png +++ /dev/null diff --git a/libraries/ActionBarSherlock/res/drawable-mdpi/abs__dialog_full_holo_light.9.png b/libraries/ActionBarSherlock/res/drawable-mdpi/abs__dialog_full_holo_light.9.pngBinary files differ deleted file mode 100644 index f18050ea5..000000000 --- a/libraries/ActionBarSherlock/res/drawable-mdpi/abs__dialog_full_holo_light.9.png +++ /dev/null diff --git a/libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_commit_search_api_holo_dark.png b/libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_commit_search_api_holo_dark.pngBinary files differ new file mode 100644 index 000000000..844c99c22 --- /dev/null +++ b/libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_commit_search_api_holo_dark.png diff --git a/libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_commit_search_api_holo_light.png b/libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_commit_search_api_holo_light.pngBinary files differ new file mode 100644 index 000000000..86c170e97 --- /dev/null +++ b/libraries/ActionBarSherlock/res/drawable-mdpi/abs__ic_commit_search_api_holo_light.png diff --git a/libraries/ActionBarSherlock/res/drawable-mdpi/abs__toast_frame.9.png b/libraries/ActionBarSherlock/res/drawable-mdpi/abs__toast_frame.9.pngBinary files differ new file mode 100644 index 000000000..b9105deee --- /dev/null +++ b/libraries/ActionBarSherlock/res/drawable-mdpi/abs__toast_frame.9.png diff --git a/libraries/ActionBarSherlock/res/drawable-xhdpi/abs__dialog_full_holo_dark.9.png b/libraries/ActionBarSherlock/res/drawable-xhdpi/abs__dialog_full_holo_dark.9.pngBinary files differ deleted file mode 100644 index f4970ad1c..000000000 --- a/libraries/ActionBarSherlock/res/drawable-xhdpi/abs__dialog_full_holo_dark.9.png +++ /dev/null diff --git a/libraries/ActionBarSherlock/res/drawable-xhdpi/abs__dialog_full_holo_light.9.png b/libraries/ActionBarSherlock/res/drawable-xhdpi/abs__dialog_full_holo_light.9.pngBinary files differ deleted file mode 100644 index 172fc3b5e..000000000 --- a/libraries/ActionBarSherlock/res/drawable-xhdpi/abs__dialog_full_holo_light.9.png +++ /dev/null diff --git a/libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_commit_search_api_holo_dark.png b/libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_commit_search_api_holo_dark.pngBinary files differ new file mode 100644 index 000000000..d8faf900a --- /dev/null +++ b/libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_commit_search_api_holo_dark.png diff --git a/libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_commit_search_api_holo_light.png b/libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_commit_search_api_holo_light.pngBinary files differ new file mode 100644 index 000000000..e7c7280ad --- /dev/null +++ b/libraries/ActionBarSherlock/res/drawable-xhdpi/abs__ic_commit_search_api_holo_light.png diff --git a/libraries/ActionBarSherlock/res/drawable-xhdpi/abs__toast_frame.9.png b/libraries/ActionBarSherlock/res/drawable-xhdpi/abs__toast_frame.9.pngBinary files differ new file mode 100644 index 000000000..9f39a7746 --- /dev/null +++ b/libraries/ActionBarSherlock/res/drawable-xhdpi/abs__toast_frame.9.png diff --git a/libraries/ActionBarSherlock/res/layout-xlarge/abs__screen_action_bar.xml b/libraries/ActionBarSherlock/res/layout-xlarge/abs__screen_action_bar.xml index 040df44ab..ab4fa28d8 100644 --- a/libraries/ActionBarSherlock/res/layout-xlarge/abs__screen_action_bar.xml +++ b/libraries/ActionBarSherlock/res/layout-xlarge/abs__screen_action_bar.xml @@ -21,6 +21,7 @@ This is an optimized layout for a screen with the Action Bar enabled.  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:orientation="vertical"      android:fitsSystemWindows="true" +    android:splitMotionEvents="false"      android:layout_width="fill_parent"      android:layout_height="fill_parent">      <com.actionbarsherlock.internal.widget.ActionBarContainer diff --git a/libraries/ActionBarSherlock/res/layout-xlarge/abs__screen_action_bar_overlay.xml b/libraries/ActionBarSherlock/res/layout-xlarge/abs__screen_action_bar_overlay.xml index c64ef141b..0ab3ae65c 100644 --- a/libraries/ActionBarSherlock/res/layout-xlarge/abs__screen_action_bar_overlay.xml +++ b/libraries/ActionBarSherlock/res/layout-xlarge/abs__screen_action_bar_overlay.xml @@ -20,7 +20,8 @@ the Action Bar enabled overlaying application content.  -->  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" -    android:fitsSystemWindows="true"> +    android:fitsSystemWindows="true" +    android:splitMotionEvents="false">      <com.actionbarsherlock.internal.nineoldandroids.widget.NineFrameLayout android:id="@+id/abs__content"          android:layout_width="fill_parent"          android:layout_height="fill_parent" /> diff --git a/libraries/ActionBarSherlock/res/layout/abs__action_bar_tab_bar_view.xml b/libraries/ActionBarSherlock/res/layout/abs__action_bar_tab_bar_view.xml index 0d51220c9..9d8f759bc 100644 --- a/libraries/ActionBarSherlock/res/layout/abs__action_bar_tab_bar_view.xml +++ b/libraries/ActionBarSherlock/res/layout/abs__action_bar_tab_bar_view.xml @@ -1,6 +1,6 @@  <?xml version="1.0" encoding="utf-8"?> -<com.actionbarsherlock.internal.widget.IcsLinearLayout +<com.actionbarsherlock.internal.widget.TabsLinearLayout      xmlns:android="http://schemas.android.com/apk/res/android"      style="?attr/actionBarTabBarStyle" -/>
\ No newline at end of file +/> diff --git a/libraries/ActionBarSherlock/res/layout/abs__dialog_title_holo.xml b/libraries/ActionBarSherlock/res/layout/abs__dialog_title_holo.xml deleted file mode 100644 index ab2b0ee6c..000000000 --- a/libraries/ActionBarSherlock/res/layout/abs__dialog_title_holo.xml +++ /dev/null @@ -1,46 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** Copyright 2011, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -**     http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - -This is an optimized layout for a screen, with the minimum set of features -enabled. ---> - -<com.actionbarsherlock.internal.widget.FakeDialogPhoneWindow xmlns:android="http://schemas.android.com/apk/res/android" -    android:orientation="vertical" -    android:fitsSystemWindows="true"> -    <TextView android:id="@android:id/title" style="?android:attr/windowTitleStyle" -        android:layout_width="wrap_content" -        android:layout_height="wrap_content" -        android:minHeight="@dimen/abs__alert_dialog_title_height" -        android:paddingLeft="16dip" -        android:paddingRight="16dip" -        android:gravity="center_vertical|left" /> -    <View android:id="@+id/abs__titleDivider" -            android:layout_width="fill_parent" -            android:layout_height="2dip" -            android:background="@color/abs__holo_blue_light" /> -    <FrameLayout -        android:layout_width="match_parent" android:layout_height="0dp" -        android:layout_weight="1" -        android:orientation="vertical" -        android:foreground="?attr/windowContentOverlay"> -        <FrameLayout android:id="@+id/abs__content" -            android:layout_width="fill_parent" -            android:layout_height="fill_parent" /> -    </FrameLayout> -</com.actionbarsherlock.internal.widget.FakeDialogPhoneWindow> diff --git a/libraries/ActionBarSherlock/res/layout/abs__list_menu_item_layout.xml b/libraries/ActionBarSherlock/res/layout/abs__list_menu_item_layout.xml deleted file mode 100644 index 147f36fe8..000000000 --- a/libraries/ActionBarSherlock/res/layout/abs__list_menu_item_layout.xml +++ /dev/null @@ -1,59 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2007 The Android Open Source Project - -     Licensed under the Apache License, Version 2.0 (the "License"); -     you may not use this file except in compliance with the License. -     You may obtain a copy of the License at -   -          http://www.apache.org/licenses/LICENSE-2.0 -   -     Unless required by applicable law or agreed to in writing, software -     distributed under the License is distributed on an "AS IS" BASIS, -     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -     See the License for the specific language governing permissions and -     limitations under the License. ---> - -<com.actionbarsherlock.internal.view.menu.ListMenuItemView xmlns:android="http://schemas.android.com/apk/res/android" -    android:layout_width="fill_parent" -    android:layout_height="?attr/listPreferredItemHeightSmall"> -     -    <!-- Icon will be inserted here. --> -     -    <!-- The title and summary have some gap between them, and this 'group' should be centered vertically. --> -    <RelativeLayout -        android:layout_width="0dip" -        android:layout_weight="1" -        android:layout_height="wrap_content" -        android:layout_gravity="center_vertical" -        android:layout_marginLeft="?attr/listPreferredItemPaddingLeft" -        android:layout_marginRight="?attr/listPreferredItemPaddingRight" -        android:duplicateParentState="true"> -         -        <TextView  -            android:id="@+id/abs__title" -            android:layout_width="fill_parent" -            android:layout_height="wrap_content" -            android:layout_alignParentTop="true" -            android:layout_alignParentLeft="true" -            android:textAppearance="?attr/textAppearanceListItemSmall" -            android:singleLine="true" -            android:duplicateParentState="true" -            android:ellipsize="marquee" -            android:fadingEdge="horizontal" /> - -        <TextView -            android:id="@+id/abs__shortcut" -            android:layout_width="wrap_content" -            android:layout_height="wrap_content" -            android:layout_below="@id/abs__title" -            android:layout_alignParentLeft="true" -            android:textAppearance="?attr/textAppearanceSmall" -            android:singleLine="true" -            android:duplicateParentState="true" /> - -    </RelativeLayout> - -    <!-- Checkbox, and/or radio button will be inserted here. --> -     -</com.actionbarsherlock.internal.view.menu.ListMenuItemView> diff --git a/libraries/ActionBarSherlock/res/layout/abs__screen_action_bar.xml b/libraries/ActionBarSherlock/res/layout/abs__screen_action_bar.xml index 1fb82fe9a..68dc7dfe5 100644 --- a/libraries/ActionBarSherlock/res/layout/abs__screen_action_bar.xml +++ b/libraries/ActionBarSherlock/res/layout/abs__screen_action_bar.xml @@ -22,7 +22,8 @@ This is an optimized layout for a screen with the Action Bar enabled.      android:layout_width="match_parent"      android:layout_height="match_parent"      android:orientation="vertical" -    android:fitsSystemWindows="true"> +    android:fitsSystemWindows="true" +    android:splitMotionEvents="false">      <com.actionbarsherlock.internal.widget.ActionBarContainer          android:id="@+id/abs__action_bar_container"          android:layout_width="fill_parent" diff --git a/libraries/ActionBarSherlock/res/layout/abs__screen_action_bar_overlay.xml b/libraries/ActionBarSherlock/res/layout/abs__screen_action_bar_overlay.xml index 0961ef561..45cd7239f 100644 --- a/libraries/ActionBarSherlock/res/layout/abs__screen_action_bar_overlay.xml +++ b/libraries/ActionBarSherlock/res/layout/abs__screen_action_bar_overlay.xml @@ -22,7 +22,8 @@ the Action Bar enabled overlaying application content.  <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="match_parent"      android:layout_height="match_parent" -    android:fitsSystemWindows="true"> +    android:fitsSystemWindows="true" +    android:splitMotionEvents="false">      <com.actionbarsherlock.internal.nineoldandroids.widget.NineFrameLayout android:id="@+id/abs__content"          android:layout_width="match_parent"          android:layout_height="match_parent" /> diff --git a/libraries/ActionBarSherlock/res/layout/abs__search_view.xml b/libraries/ActionBarSherlock/res/layout/abs__search_view.xml index 6ba319121..55d2c7345 100644 --- a/libraries/ActionBarSherlock/res/layout/abs__search_view.xml +++ b/libraries/ActionBarSherlock/res/layout/abs__search_view.xml @@ -40,7 +40,7 @@      <ImageView              android:id="@+id/abs__search_button" -            style="?android:attr/actionButtonStyle" +            style="?attr/actionButtonStyle"              android:layout_width="wrap_content"              android:layout_height="match_parent"              android:layout_gravity="center_vertical" diff --git a/libraries/ActionBarSherlock/res/layout/abs__simple_dropdown_hint.xml b/libraries/ActionBarSherlock/res/layout/abs__simple_dropdown_hint.xml index 8fc0eb12c..0088e14a7 100644 --- a/libraries/ActionBarSherlock/res/layout/abs__simple_dropdown_hint.xml +++ b/libraries/ActionBarSherlock/res/layout/abs__simple_dropdown_hint.xml @@ -19,7 +19,7 @@  -->  <TextView xmlns:android="http://schemas.android.com/apk/res/android"            android:id="@android:id/text1" -          android:textAppearance="?android:attr/dropDownHintAppearance" +          android:textAppearance="?attr/dropDownHintAppearance"            android:singleLine="true"            android:layout_marginLeft="3dip"            android:layout_marginTop="3dip" diff --git a/libraries/ActionBarSherlock/res/values-large-mdpi-1024x600/abs__dimens.xml b/libraries/ActionBarSherlock/res/values-large-mdpi-1024x600/abs__dimens.xml index 35910333b..d3a64c7d0 100644 --- a/libraries/ActionBarSherlock/res/values-large-mdpi-1024x600/abs__dimens.xml +++ b/libraries/ActionBarSherlock/res/values-large-mdpi-1024x600/abs__dimens.xml @@ -32,5 +32,5 @@      <dimen name="abs__action_bar_subtitle_bottom_margin">9dip</dimen>      <!-- Minimum width for an action button in the menu area of an action bar --> -    <dimen name="action_button_min_width">64dip</dimen> +    <dimen name="abs__action_button_min_width">64dip</dimen>  </resources> diff --git a/libraries/ActionBarSherlock/res/values-large/abs__dimens.xml b/libraries/ActionBarSherlock/res/values-large/abs__dimens.xml deleted file mode 100644 index 63b12f7f3..000000000 --- a/libraries/ActionBarSherlock/res/values-large/abs__dimens.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* //device/apps/common/assets/res/any/dimens.xml -** -** Copyright 2006, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -**     http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ ---> -<resources> -    <!-- The platform's desired minimum size for a dialog's width when it -         is along the major axis (that is the screen is landscape).  This may -         be either a fraction or a dimension. --> -    <item type="dimen" name="abs__dialog_min_width_major">55%</item> -    <!-- The platform's desired minimum size for a dialog's width when it -         is along the minor axis (that is the screen is portrait).  This may -         be either a fraction or a dimension. --> -    <item type="dimen" name="abs__dialog_min_width_minor">80%</item> -</resources> diff --git a/libraries/ActionBarSherlock/res/values-sw600dp/abs__dimens.xml b/libraries/ActionBarSherlock/res/values-sw600dp/abs__dimens.xml index f67853817..175a47fec 100644 --- a/libraries/ActionBarSherlock/res/values-sw600dp/abs__dimens.xml +++ b/libraries/ActionBarSherlock/res/values-sw600dp/abs__dimens.xml @@ -34,5 +34,5 @@      <integer name="abs__max_action_buttons">5</integer>      <!-- Minimum width for an action button in the menu area of an action bar --> -    <dimen name="action_button_min_width">64dip</dimen> +    <dimen name="abs__action_button_min_width">64dip</dimen>  </resources> diff --git a/libraries/ActionBarSherlock/res/values-v14/abs__themes.xml b/libraries/ActionBarSherlock/res/values-v14/abs__themes.xml index 5fac1ab58..75e317b4a 100644 --- a/libraries/ActionBarSherlock/res/values-v14/abs__themes.xml +++ b/libraries/ActionBarSherlock/res/values-v14/abs__themes.xml @@ -26,9 +26,4 @@        <item name="android:windowActionBar">false</item>        <item name="android:windowNoTitle">true</item>      </style> - -    <style name="Theme.Sherlock.Dialog" parent="android:Theme.Holo.Dialog"> -    </style> -    <style name="Theme.Sherlock.Light.Dialog" parent="android:Theme.Holo.Light.Dialog"> -    </style>  </resources> diff --git a/libraries/ActionBarSherlock/res/values/abs__attrs.xml b/libraries/ActionBarSherlock/res/values/abs__attrs.xml index 32631ca8d..af5873d90 100644 --- a/libraries/ActionBarSherlock/res/values/abs__attrs.xml +++ b/libraries/ActionBarSherlock/res/values/abs__attrs.xml @@ -181,7 +181,7 @@          <!-- Drawable used as a background for activated items. -->          <attr name="activatedBackgroundIndicator" format="reference" /> -        <attr name="android:windowIsFloating" /> +        <attr name="dropDownHintAppearance" format="reference" />      </declare-styleable> diff --git a/libraries/ActionBarSherlock/res/values/abs__colors.xml b/libraries/ActionBarSherlock/res/values/abs__colors.xml index 625c632ff..b189e727a 100644 --- a/libraries/ActionBarSherlock/res/values/abs__colors.xml +++ b/libraries/ActionBarSherlock/res/values/abs__colors.xml @@ -21,7 +21,4 @@      <color name="abs__bright_foreground_holo_light">@color/abs__background_holo_dark</color>      <color name="abs__bright_foreground_disabled_holo_dark">#ff4c4c4c</color>      <color name="abs__bright_foreground_disabled_holo_light">#ffb2b2b2</color> -    <color name="abs__bright_foreground_inverse_holo_dark">@color/abs__bright_foreground_holo_light</color> -    <color name="abs__bright_foreground_inverse_holo_light">@color/abs__bright_foreground_holo_dark</color> -    <color name="abs__holo_blue_light">#ff33b5e5</color>  </resources> diff --git a/libraries/ActionBarSherlock/res/values/abs__dimens.xml b/libraries/ActionBarSherlock/res/values/abs__dimens.xml index 831289e07..9ded21978 100644 --- a/libraries/ActionBarSherlock/res/values/abs__dimens.xml +++ b/libraries/ActionBarSherlock/res/values/abs__dimens.xml @@ -36,18 +36,6 @@      <!-- Minimum width for an action button in the menu area of an action bar -->      <dimen name="abs__action_button_min_width">56dip</dimen> -    <!-- Dialog title height --> -    <dimen name="abs__alert_dialog_title_height">64dip</dimen> - -    <!-- The platform's desired minimum size for a dialog's width when it -         is along the major axis (that is the screen is landscape).  This may -         be either a fraction or a dimension. --> -    <item type="dimen" name="abs__dialog_min_width_major">65%</item> -    <!-- The platform's desired minimum size for a dialog's width when it -         is along the minor axis (that is the screen is portrait).  This may -         be either a fraction or a dimension. --> -    <item type="dimen" name="abs__dialog_min_width_minor">95%</item> -      <!-- Text padding for dropdown items -->      <dimen name="abs__dropdownitem_text_padding_left">8dip</dimen> diff --git a/libraries/ActionBarSherlock/res/values/abs__strings.xml b/libraries/ActionBarSherlock/res/values/abs__strings.xml index 06a2a2af4..cf0235922 100644 --- a/libraries/ActionBarSherlock/res/values/abs__strings.xml +++ b/libraries/ActionBarSherlock/res/values/abs__strings.xml @@ -29,10 +29,6 @@      <!-- Title for a button to expand the list of activities in ActivityChooserView [CHAR LIMIT=25] -->      <string name="abs__activity_chooser_view_see_all">See all...</string> -    <!-- Title default for a dialog showing possible activities in ActivityChooserView [CHAR LIMIT=25] --> -    <string name="abs__activity_chooser_view_dialog_title_default">Select activity</string> -    <!-- Title for a dialog showing possible activities for sharing in ShareActionProvider [CHAR LIMIT=25] --> -    <string name="abs__share_action_provider_share_with">Share with...</string>      <!-- Description of the shwoing of a popup window with activities to choose from. [CHAR LIMIT=NONE] -->      <string name="abs__activitychooserview_choose_application">Choose an application</string>      <!-- Description of the choose target button in a ShareActionProvider (share UI). [CHAR LIMIT=NONE] --> diff --git a/libraries/ActionBarSherlock/res/values/abs__styles.xml b/libraries/ActionBarSherlock/res/values/abs__styles.xml index 45a18c183..f86c1b823 100644 --- a/libraries/ActionBarSherlock/res/values/abs__styles.xml +++ b/libraries/ActionBarSherlock/res/values/abs__styles.xml @@ -302,25 +302,6 @@ -    <style name="DialogWindowTitle.Sherlock" parent="Widget"> -        <item name="android:maxLines">1</item> -        <item name="android:scrollHorizontally">true</item> -        <item name="android:textAppearance">@style/TextAppearance.Sherlock.DialogWindowTitle</item> -        <item name="android:minHeight">@dimen/abs__alert_dialog_title_height</item> -        <item name="android:paddingLeft">16dip</item> -        <item name="android:paddingRight">16dip</item> -    </style> -    <style name="DialogWindowTitle.Sherlock.Light" parent="Widget"> -        <item name="android:maxLines">1</item> -        <item name="android:scrollHorizontally">true</item> -        <item name="android:textAppearance">@style/TextAppearance.Sherlock.Light.DialogWindowTitle</item> -        <item name="android:minHeight">@dimen/abs__alert_dialog_title_height</item> -        <item name="android:paddingLeft">16dip</item> -        <item name="android:paddingRight">16dip</item> -    </style> - - -      <style name="TextAppearance.Sherlock.Widget.ActionBar.Menu" parent="Widget">          <item name="android:textSize">12sp</item>          <item name="android:textStyle">bold</item> @@ -387,15 +368,6 @@          <item name="android:textStyle">normal</item>      </style> -    <style name="TextAppearance.Sherlock.DialogWindowTitle" parent="Widget"> -        <item name="android:textSize">22sp</item> -        <item name="android:textColor">@color/abs__holo_blue_light</item> -    </style> -    <style name="TextAppearance.Sherlock.Light.DialogWindowTitle" parent="Widget"> -        <item name="android:textSize">22sp</item> -        <item name="android:textColor">@color/abs__holo_blue_light</item> -    </style> -      <style name="Sherlock.__TextAppearance.Small" parent="Widget">        <item name="android:textSize">14sp</item>        <item name="android:textColor">?android:attr/textColorSecondary</item> @@ -409,4 +381,32 @@          <item name="android:textColor">?textColorPrimary</item>          <item name="android:textSize">14sp</item>      </style> + +    <style name="TextAppearance.Sherlock" parent="@android:style/TextAppearance"/> + +    <style name="TextAppearance.Sherlock.SearchResult"> +        <item name="android:textStyle">normal</item> +        <item name="android:textColor">?android:attr/textColorPrimary</item> +        <item name="android:textColorHint">?android:attr/textColorHint</item> +    </style> + +    <style name="TextAppearance.Sherlock.SearchResult.Title"> +        <item name="android:textSize">18sp</item> +    </style> + +    <style name="TextAppearance.Sherlock.SearchResult.Subtitle"> +        <item name="android:textSize">14sp</item> +        <item name="android:textColor">?android:attr/textColorSecondary</item> +    </style> + +    <style name="TextAppearance.Sherlock.Light.SearchResult" parent="TextAppearance.Sherlock.SearchResult"/> + +    <style name="TextAppearance.Sherlock.Light.SearchResult.Title"> +        <item name="android:textSize">18sp</item> +    </style> + +    <style name="TextAppearance.Sherlock.Light.SearchResult.Subtitle"> +        <item name="android:textSize">14sp</item> +        <item name="android:textColor">?android:attr/textColorSecondary</item> +    </style>  </resources> diff --git a/libraries/ActionBarSherlock/res/values/abs__themes.xml b/libraries/ActionBarSherlock/res/values/abs__themes.xml index 634fa798b..6215e048f 100644 --- a/libraries/ActionBarSherlock/res/values/abs__themes.xml +++ b/libraries/ActionBarSherlock/res/values/abs__themes.xml @@ -9,8 +9,6 @@      </style>      <style name="Sherlock.__Theme.DarkActionBar" parent="Theme.Sherlock.Light">      </style> -    <style name="Sherlock.__Theme.Dialog" parent="android:Theme.Dialog"> -    </style>      <style name="Theme.Sherlock" parent="Sherlock.__Theme">          <!-- Action bar styles (from Theme.Holo) --> @@ -62,6 +60,8 @@          <item name="textAppearanceSmall">@style/TextAppearance.Sherlock.Small</item>          <item name="textAppearanceLargePopupMenu">@style/TextAppearance.Sherlock.Widget.PopupMenu.Large</item>          <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.Sherlock.Widget.PopupMenu.Small</item> +        <item name="textAppearanceSearchResultTitle">@style/TextAppearance.Sherlock.SearchResult.Title</item> +        <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.Sherlock.SearchResult.Subtitle</item>          <item name="popupMenuStyle">@style/Widget.Sherlock.PopupMenu</item>          <!-- Internal --><item name="listPopupWindowStyle">@style/Widget.Sherlock.ListPopupWindow</item> @@ -74,8 +74,12 @@          <item name="searchViewGoIcon">@drawable/abs__ic_go</item>          <item name="searchViewVoiceIcon">@drawable/abs__ic_voice_search</item>          <item name="searchAutoCompleteTextView">@style/Widget.Sherlock.SearchAutoCompleteTextView</item> -        <item name="android:dropDownHintAppearance">@style/TextAppearance.Sherlock.Widget.DropDownHint</item> +        <item name="dropDownHintAppearance">@style/TextAppearance.Sherlock.Widget.DropDownHint</item> +        <item name="searchViewEditQuery">@drawable/abs__ic_commit_search_api_holo_dark</item> +        <item name="searchViewEditQueryBackground">?selectableItemBackground</item> +        <item name="searchResultListItemHeight">58dp</item> +        <item name="windowNoTitle">false</item>          <item name="windowActionBar">true</item>          <item name="windowActionModeOverlay">false</item>          <item name="windowContentOverlay">@null</item> @@ -130,6 +134,8 @@          <item name="textAppearanceSmall">@style/TextAppearance.Sherlock.Light.Small</item>          <item name="textAppearanceLargePopupMenu">@style/TextAppearance.Sherlock.Light.Widget.PopupMenu.Large</item>          <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.Sherlock.Light.Widget.PopupMenu.Small</item> +        <item name="textAppearanceSearchResultTitle">@style/TextAppearance.Sherlock.Light.SearchResult.Title</item> +        <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.Sherlock.Light.SearchResult.Subtitle</item>          <item name="popupMenuStyle">@style/Widget.Sherlock.Light.PopupMenu</item>          <!-- Internal --><item name="listPopupWindowStyle">@style/Widget.Sherlock.Light.ListPopupWindow</item> @@ -142,8 +148,12 @@          <item name="searchViewGoIcon">@drawable/abs__ic_go_search_api_holo_light</item>          <item name="searchViewVoiceIcon">@drawable/abs__ic_voice_search_api_holo_light</item>          <item name="searchAutoCompleteTextView">@style/Widget.Sherlock.Light.SearchAutoCompleteTextView</item> -        <item name="android:dropDownHintAppearance">@style/TextAppearance.Sherlock.Widget.DropDownHint</item> +        <item name="dropDownHintAppearance">@style/TextAppearance.Sherlock.Widget.DropDownHint</item> +        <item name="searchViewEditQuery">@drawable/abs__ic_commit_search_api_holo_light</item> +        <item name="searchViewEditQueryBackground">?selectableItemBackground</item> +        <item name="searchResultListItemHeight">58dp</item> +        <item name="windowNoTitle">false</item>          <item name="windowActionBar">true</item>          <item name="windowActionModeOverlay">false</item>          <item name="windowContentOverlay">@null</item> @@ -171,6 +181,18 @@          <item name="actionModePopupWindowStyle">@style/Widget.Sherlock.PopupWindow.ActionMode</item>          <item name="actionModeShareDrawable">@drawable/abs__ic_menu_share_holo_dark</item> + +        <!-- We want the dark action bar SearchView stuff --> +        <item name="searchDropdownBackground">@drawable/abs__search_dropdown_dark</item> +        <item name="searchViewTextField">@drawable/abs__textfield_searchview_holo_dark</item> +        <item name="searchViewTextFieldRight">@drawable/abs__textfield_searchview_right_holo_dark</item> +        <item name="searchViewCloseIcon">@drawable/abs__ic_clear</item> +        <item name="searchViewSearchIcon">@drawable/abs__ic_search</item> +        <item name="searchViewGoIcon">@drawable/abs__ic_go</item> +        <item name="searchViewVoiceIcon">@drawable/abs__ic_voice_search</item> +        <item name="searchAutoCompleteTextView">@style/Widget.Sherlock.SearchAutoCompleteTextView</item> +        <item name="dropDownHintAppearance">@style/TextAppearance.Sherlock.Widget.DropDownHint</item> +        <item name="searchViewEditQuery">@drawable/abs__ic_commit_search_api_holo_dark</item>      </style> @@ -182,58 +204,4 @@          <item name="windowActionBar">false</item>          <item name="windowNoTitle">true</item>      </style> - - -    <style name="Theme.Sherlock.Dialog" parent="android:Theme"> -        <item name="android:windowFrame">@null</item> -        <item name="android:windowTitleStyle">@style/DialogWindowTitle.Sherlock</item> -        <item name="android:windowBackground">@drawable/abs__dialog_full_holo_dark</item> -        <item name="android:windowIsFloating">true</item> -        <item name="android:windowContentOverlay">@null</item> -        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> -        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> - -        <item name="android:windowActionBar">false</item> -        <item name="android:windowActionModeOverlay">true</item> -        <item name="android:windowCloseOnTouchOutside">true</item> -        <item name="android:windowNoTitle">true</item> -        <item name="android:backgroundDimAmount">0.6</item> - -        <item name="android:colorBackgroundCacheHint">@null</item> - -        <item name="android:textColorPrimary">@color/abs__primary_text_holo_dark</item> -        <item name="android:textColorPrimaryInverse">@color/abs__primary_text_holo_light</item> - -        <item name="windowMinWidthMajor">@dimen/abs__dialog_min_width_major</item> -        <item name="windowMinWidthMinor">@dimen/abs__dialog_min_width_minor</item> - -        <item name="windowActionBar">false</item> -        <item name="windowContentOverlay">@null</item> -    </style> -    <style name="Theme.Sherlock.Light.Dialog" parent="android:Theme.Light"> -        <item name="android:windowFrame">@null</item> -        <item name="android:windowTitleStyle">@style/DialogWindowTitle.Sherlock.Light</item> -        <item name="android:windowBackground">@drawable/abs__dialog_full_holo_light</item> -        <item name="android:windowIsFloating">true</item> -        <item name="android:windowContentOverlay">@null</item> -        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> -        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> - -        <item name="android:windowActionBar">false</item> -        <item name="android:windowActionModeOverlay">true</item> -        <item name="android:windowCloseOnTouchOutside">true</item> -        <item name="android:windowNoTitle">true</item> -        <item name="android:backgroundDimAmount">0.6</item> - -        <item name="android:colorBackgroundCacheHint">@null</item> - -        <item name="android:textColorPrimary">@color/abs__primary_text_holo_light</item> -        <item name="android:textColorPrimaryInverse">@color/abs__primary_text_holo_dark</item> - -        <item name="windowMinWidthMajor">@dimen/abs__dialog_min_width_major</item> -        <item name="windowMinWidthMinor">@dimen/abs__dialog_min_width_minor</item> - -        <item name="windowActionBar">false</item> -        <item name="windowContentOverlay">@null</item> -    </style>  </resources> diff --git a/libraries/ActionBarSherlock/src/android/support/v4/app/Watson.java b/libraries/ActionBarSherlock/src/android/support/v4/app/Watson.java index d93de4c6a..8c8ffb018 100644 --- a/libraries/ActionBarSherlock/src/android/support/v4/app/Watson.java +++ b/libraries/ActionBarSherlock/src/android/support/v4/app/Watson.java @@ -3,18 +3,17 @@ package android.support.v4.app;  import android.util.Log;  import android.view.View;  import android.view.Window; +import com.actionbarsherlock.ActionBarSherlock;  import com.actionbarsherlock.ActionBarSherlock.OnCreatePanelMenuListener;  import com.actionbarsherlock.ActionBarSherlock.OnMenuItemSelectedListener;  import com.actionbarsherlock.ActionBarSherlock.OnPreparePanelListener;  import com.actionbarsherlock.view.Menu;  import com.actionbarsherlock.view.MenuInflater;  import com.actionbarsherlock.view.MenuItem; -  import java.util.ArrayList;  /** I'm in ur package. Stealing ur variables. */  public abstract class Watson extends FragmentActivity implements OnCreatePanelMenuListener, OnPreparePanelListener, OnMenuItemSelectedListener { -    private static final boolean DEBUG = false;      private static final String TAG = "Watson";      /** Fragment interface for menu creation callback. */ @@ -39,11 +38,11 @@ public abstract class Watson extends FragmentActivity implements OnCreatePanelMe      @Override      public boolean onCreatePanelMenu(int featureId, Menu menu) { -        if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] featureId: " + featureId + ", menu: " + menu); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[onCreatePanelMenu] featureId: " + featureId + ", menu: " + menu);          if (featureId == Window.FEATURE_OPTIONS_PANEL) {              boolean result = onCreateOptionsMenu(menu); -            if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] activity create result: " + result); +            if (ActionBarSherlock.DEBUG) Log.d(TAG, "[onCreatePanelMenu] activity create result: " + result);              MenuInflater inflater = getSupportMenuInflater();              boolean show = false; @@ -73,10 +72,10 @@ public abstract class Watson extends FragmentActivity implements OnCreatePanelMe              mCreatedMenus = newMenus; -            if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] fragments create result: " + show); +            if (ActionBarSherlock.DEBUG) Log.d(TAG, "[onCreatePanelMenu] fragments create result: " + show);              result |= show; -            if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] returning " + result); +            if (ActionBarSherlock.DEBUG) Log.d(TAG, "[onCreatePanelMenu] returning " + result);              return result;          }          return false; @@ -84,11 +83,11 @@ public abstract class Watson extends FragmentActivity implements OnCreatePanelMe      @Override      public boolean onPreparePanel(int featureId, View view, Menu menu) { -        if (DEBUG) Log.d(TAG, "[onPreparePanel] featureId: " + featureId + ", view: " + view + " menu: " + menu); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[onPreparePanel] featureId: " + featureId + ", view: " + view + " menu: " + menu);          if (featureId == Window.FEATURE_OPTIONS_PANEL) {              boolean result = onPrepareOptionsMenu(menu); -            if (DEBUG) Log.d(TAG, "[onPreparePanel] activity prepare result: " + result); +            if (ActionBarSherlock.DEBUG) Log.d(TAG, "[onPreparePanel] activity prepare result: " + result);              boolean show = false;              if (mFragments.mAdded != null) { @@ -101,11 +100,11 @@ public abstract class Watson extends FragmentActivity implements OnCreatePanelMe                  }              } -            if (DEBUG) Log.d(TAG, "[onPreparePanel] fragments prepare result: " + show); +            if (ActionBarSherlock.DEBUG) Log.d(TAG, "[onPreparePanel] fragments prepare result: " + show);              result |= show;              result &= menu.hasVisibleItems(); -            if (DEBUG) Log.d(TAG, "[onPreparePanel] returning " + result); +            if (ActionBarSherlock.DEBUG) Log.d(TAG, "[onPreparePanel] returning " + result);              return result;          }          return false; @@ -113,7 +112,7 @@ public abstract class Watson extends FragmentActivity implements OnCreatePanelMe      @Override      public boolean onMenuItemSelected(int featureId, MenuItem item) { -        if (DEBUG) Log.d(TAG, "[onMenuItemSelected] featureId: " + featureId + ", item: " + item); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[onMenuItemSelected] featureId: " + featureId + ", item: " + item);          if (featureId == Window.FEATURE_OPTIONS_PANEL) {              if (onOptionsItemSelected(item)) { diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/ActionBarSherlock.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/ActionBarSherlock.java index ab160f836..2c0312725 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/ActionBarSherlock.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/ActionBarSherlock.java @@ -1,14 +1,5 @@  package com.actionbarsherlock;
 -import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
 -import java.lang.annotation.ElementType;
 -import java.lang.annotation.Retention;
 -import java.lang.annotation.RetentionPolicy;
 -import java.lang.annotation.Target;
 -import java.lang.reflect.Constructor;
 -import java.lang.reflect.InvocationTargetException;
 -import java.util.HashMap;
 -import java.util.Iterator;
  import android.app.Activity;
  import android.content.Context;
  import android.content.res.Configuration;
 @@ -27,6 +18,16 @@ import com.actionbarsherlock.view.ActionMode;  import com.actionbarsherlock.view.Menu;
  import com.actionbarsherlock.view.MenuInflater;
  import com.actionbarsherlock.view.MenuItem;
 +import java.lang.annotation.ElementType;
 +import java.lang.annotation.Retention;
 +import java.lang.annotation.RetentionPolicy;
 +import java.lang.annotation.Target;
 +import java.lang.reflect.Constructor;
 +import java.lang.reflect.InvocationTargetException;
 +import java.util.HashMap;
 +import java.util.Iterator;
 +
 +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
  /**
   * <p>Helper for implementing the action bar design pattern across all versions
 @@ -40,7 +41,7 @@ import com.actionbarsherlock.view.MenuItem;   */
  public abstract class ActionBarSherlock {
      protected static final String TAG = "ActionBarSherlock";
 -    protected static final boolean DEBUG = false;
 +    public static final boolean DEBUG = false;
      private static final Class<?>[] CONSTRUCTOR_ARGS = new Class[] { Activity.class, int.class };
      private static final HashMap<Implementation, Class<? extends ActionBarSherlock>> IMPLEMENTATIONS =
 @@ -791,4 +792,9 @@ public abstract class ActionBarSherlock {       * @see ActionMode
       */
      public abstract ActionMode startActionMode(ActionMode.Callback callback);
 +
 +    /**
 +     * Ensure that the action bar is attached.
 +     */
 +    public void ensureActionBar() {}
  }
 diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockActivity.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockActivity.java index 7b4543640..48a92da65 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockActivity.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockActivity.java @@ -243,6 +243,12 @@ public abstract class SherlockActivity extends Activity implements OnCreatePanel          getSherlock().requestFeature((int)featureId);
      }
 +    @Override
 +    public View findViewById(int id) {
 +        getSherlock().ensureActionBar();
 +        return super.findViewById(id);
 +    }
 +
      ///////////////////////////////////////////////////////////////////////////
      // Progress Indication
 diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockDialogFragment.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockDialogFragment.java index a7c856bf0..c139325cd 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockDialogFragment.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockDialogFragment.java @@ -8,9 +8,9 @@ import com.actionbarsherlock.view.Menu;  import com.actionbarsherlock.view.MenuInflater;  import com.actionbarsherlock.view.MenuItem; -import static com.actionbarsherlock.app.SherlockFragmentActivity.OnCreateOptionsMenuListener; -import static com.actionbarsherlock.app.SherlockFragmentActivity.OnOptionsItemSelectedListener; -import static com.actionbarsherlock.app.SherlockFragmentActivity.OnPrepareOptionsMenuListener; +import static android.support.v4.app.Watson.OnCreateOptionsMenuListener; +import static android.support.v4.app.Watson.OnOptionsItemSelectedListener; +import static android.support.v4.app.Watson.OnPrepareOptionsMenuListener;  public class SherlockDialogFragment extends DialogFragment implements OnCreateOptionsMenuListener, OnPrepareOptionsMenuListener, OnOptionsItemSelectedListener {      private SherlockFragmentActivity mActivity; diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockExpandableListActivity.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockExpandableListActivity.java index 078f9b0ca..9f4e81d14 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockExpandableListActivity.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockExpandableListActivity.java @@ -232,6 +232,12 @@ public abstract class SherlockExpandableListActivity extends ExpandableListActiv          getSherlock().requestFeature((int)featureId);
      }
 +    @Override
 +    public View findViewById(int id) {
 +        getSherlock().ensureActionBar();
 +        return super.findViewById(id);
 +    }
 +
      ///////////////////////////////////////////////////////////////////////////
      // Progress Indication
 diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockFragment.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockFragment.java index 0f24e9c85..0bdd068a6 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockFragment.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockFragment.java @@ -8,9 +8,9 @@ import com.actionbarsherlock.view.Menu;  import com.actionbarsherlock.view.MenuInflater;  import com.actionbarsherlock.view.MenuItem; -import static com.actionbarsherlock.app.SherlockFragmentActivity.OnCreateOptionsMenuListener; -import static com.actionbarsherlock.app.SherlockFragmentActivity.OnOptionsItemSelectedListener; -import static com.actionbarsherlock.app.SherlockFragmentActivity.OnPrepareOptionsMenuListener; +import static android.support.v4.app.Watson.OnCreateOptionsMenuListener; +import static android.support.v4.app.Watson.OnOptionsItemSelectedListener; +import static android.support.v4.app.Watson.OnPrepareOptionsMenuListener;  public class SherlockFragment extends Fragment implements OnCreateOptionsMenuListener, OnPrepareOptionsMenuListener, OnOptionsItemSelectedListener {      private SherlockFragmentActivity mActivity; diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockFragmentActivity.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockFragmentActivity.java index 3d092f033..e764c170b 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockFragmentActivity.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockFragmentActivity.java @@ -19,7 +19,6 @@ import static com.actionbarsherlock.ActionBarSherlock.OnActionModeStartedListene  /** @see {@link android.support.v4.app.Watson} */  public class SherlockFragmentActivity extends Watson implements OnActionModeStartedListener, OnActionModeFinishedListener { -    private static final boolean DEBUG = false;      private static final String TAG = "SherlockFragmentActivity";      private ActionBarSherlock mSherlock; @@ -139,33 +138,33 @@ public class SherlockFragmentActivity extends Watson implements OnActionModeStar      ///////////////////////////////////////////////////////////////////////////      public MenuInflater getSupportMenuInflater() { -        if (DEBUG) Log.d(TAG, "[getSupportMenuInflater]"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[getSupportMenuInflater]");          return getSherlock().getMenuInflater();      }      public void invalidateOptionsMenu() { -        if (DEBUG) Log.d(TAG, "[invalidateOptionsMenu]"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[invalidateOptionsMenu]");          getSherlock().dispatchInvalidateOptionsMenu();      }      public void supportInvalidateOptionsMenu() { -        if (DEBUG) Log.d(TAG, "[supportInvalidateOptionsMenu]"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[supportInvalidateOptionsMenu]");          invalidateOptionsMenu();      }      @Override      public final boolean onCreatePanelMenu(int featureId, android.view.Menu menu) { -        if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] featureId: " + featureId + ", menu: " + menu); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[onCreatePanelMenu] featureId: " + featureId + ", menu: " + menu);          if (featureId == Window.FEATURE_OPTIONS_PANEL && !mIgnoreNativeCreate) {              mIgnoreNativeCreate = true;              boolean result = getSherlock().dispatchCreateOptionsMenu(menu);              mIgnoreNativeCreate = false; -            if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] returning " + result); +            if (ActionBarSherlock.DEBUG) Log.d(TAG, "[onCreatePanelMenu] returning " + result);              return result;          }          return super.onCreatePanelMenu(featureId, menu); @@ -178,14 +177,14 @@ public class SherlockFragmentActivity extends Watson implements OnActionModeStar      @Override      public final boolean onPreparePanel(int featureId, View view, android.view.Menu menu) { -        if (DEBUG) Log.d(TAG, "[onPreparePanel] featureId: " + featureId + ", view: " + view + ", menu: " + menu); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[onPreparePanel] featureId: " + featureId + ", view: " + view + ", menu: " + menu);          if (featureId == Window.FEATURE_OPTIONS_PANEL && !mIgnoreNativePrepare) {              mIgnoreNativePrepare = true;              boolean result = getSherlock().dispatchPrepareOptionsMenu(menu);              mIgnoreNativePrepare = false; -            if (DEBUG) Log.d(TAG, "[onPreparePanel] returning " + result); +            if (ActionBarSherlock.DEBUG) Log.d(TAG, "[onPreparePanel] returning " + result);              return result;          }          return super.onPreparePanel(featureId, view, menu); @@ -198,14 +197,14 @@ public class SherlockFragmentActivity extends Watson implements OnActionModeStar      @Override      public final boolean onMenuItemSelected(int featureId, android.view.MenuItem item) { -        if (DEBUG) Log.d(TAG, "[onMenuItemSelected] featureId: " + featureId + ", item: " + item); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[onMenuItemSelected] featureId: " + featureId + ", item: " + item.getTitle());          if (featureId == Window.FEATURE_OPTIONS_PANEL && !mIgnoreNativeSelected) {              mIgnoreNativeSelected = true;              boolean result = getSherlock().dispatchOptionsItemSelected(item);              mIgnoreNativeSelected = false; -            if (DEBUG) Log.d(TAG, "[onMenuItemSelected] returning " + result); +            if (ActionBarSherlock.DEBUG) Log.d(TAG, "[onMenuItemSelected] returning " + result);              return result;          }          return super.onMenuItemSelected(featureId, item); @@ -276,6 +275,12 @@ public class SherlockFragmentActivity extends Watson implements OnActionModeStar          getSherlock().requestFeature((int)featureId);      } +    @Override +    public View findViewById(int id) { +        getSherlock().ensureActionBar(); +        return super.findViewById(id); +    } +      ///////////////////////////////////////////////////////////////////////////      // Progress Indication diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockListActivity.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockListActivity.java index aba6d85e8..7ced7812a 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockListActivity.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockListActivity.java @@ -243,6 +243,12 @@ public abstract class SherlockListActivity extends ListActivity implements OnCre          getSherlock().requestFeature((int)featureId);
      }
 +    @Override
 +    public View findViewById(int id) {
 +        getSherlock().ensureActionBar();
 +        return super.findViewById(id);
 +    }
 +
      ///////////////////////////////////////////////////////////////////////////
      // Progress Indication
 diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockListFragment.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockListFragment.java index 13ca3c49f..7c4d09511 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockListFragment.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockListFragment.java @@ -8,9 +8,9 @@ import com.actionbarsherlock.view.Menu;  import com.actionbarsherlock.view.MenuInflater;  import com.actionbarsherlock.view.MenuItem; -import static com.actionbarsherlock.app.SherlockFragmentActivity.OnCreateOptionsMenuListener; -import static com.actionbarsherlock.app.SherlockFragmentActivity.OnOptionsItemSelectedListener; -import static com.actionbarsherlock.app.SherlockFragmentActivity.OnPrepareOptionsMenuListener; +import static android.support.v4.app.Watson.OnCreateOptionsMenuListener; +import static android.support.v4.app.Watson.OnOptionsItemSelectedListener; +import static android.support.v4.app.Watson.OnPrepareOptionsMenuListener;  public class SherlockListFragment extends ListFragment implements OnCreateOptionsMenuListener, OnPrepareOptionsMenuListener, OnOptionsItemSelectedListener {      private SherlockFragmentActivity mActivity; diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockPreferenceActivity.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockPreferenceActivity.java index bee72cb25..85c6ab214 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockPreferenceActivity.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/app/SherlockPreferenceActivity.java @@ -243,6 +243,12 @@ public abstract class SherlockPreferenceActivity extends PreferenceActivity impl          getSherlock().requestFeature((int)featureId);
      }
 +    @Override
 +    public View findViewById(int id) {
 +        getSherlock().ensureActionBar();
 +        return super.findViewById(id);
 +    }
 +
      ///////////////////////////////////////////////////////////////////////////
      // Progress Indication
 diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockCompat.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockCompat.java index 5e69275c7..e89850203 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockCompat.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockCompat.java @@ -1,11 +1,5 @@  package com.actionbarsherlock.internal; -import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; -import static com.actionbarsherlock.internal.ResourcesCompat.getResources_getBoolean; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import org.xmlpull.v1.XmlPullParser;  import android.app.Activity;  import android.content.Context;  import android.content.pm.ActivityInfo; @@ -28,9 +22,8 @@ import android.view.Window;  import android.view.accessibility.AccessibilityEvent;  import android.view.animation.Animation;  import android.view.animation.AnimationUtils; -import android.widget.FrameLayout; -import android.widget.TextView;  import com.actionbarsherlock.ActionBarSherlock; +import com.actionbarsherlock.BuildConfig;  import com.actionbarsherlock.R;  import com.actionbarsherlock.app.ActionBar;  import com.actionbarsherlock.internal.app.ActionBarImpl; @@ -46,6 +39,13 @@ import com.actionbarsherlock.internal.widget.IcsProgressBar;  import com.actionbarsherlock.view.ActionMode;  import com.actionbarsherlock.view.Menu;  import com.actionbarsherlock.view.MenuItem; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import org.xmlpull.v1.XmlPullParser; + +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; +import static com.actionbarsherlock.internal.ResourcesCompat.getResources_getBoolean;  @ActionBarSherlock.Implementation(api = 7)  public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBuilder.Callback, com.actionbarsherlock.view.Window.Callback, MenuPresenter.Callback, android.view.MenuItem.OnMenuItemClickListener { @@ -108,13 +108,6 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      /** Parent view in which the context action bar is displayed. */      private ActionBarContextView mActionModeView; -    /** Title view used with dialogs. */ -    private TextView mTitleView; -    /** Current activity title. */ -    private CharSequence mTitle = null; -    /** Whether or not this "activity" is floating (i.e., a dialog) */ -    private boolean mIsFloating; -      /////////////////////////////////////////////////////////////////////////// @@ -123,14 +116,14 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public ActionBar getActionBar() { -        if (DEBUG) Log.d(TAG, "[getActionBar]"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[getActionBar]");          initActionBar();          return aActionBar;      }      private void initActionBar() { -        if (DEBUG) Log.d(TAG, "[initActionBar]"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[initActionBar]");          // Initializing the window decor can change window feature flags.          // Make sure that we have the correct set before performing the test below. @@ -157,14 +150,14 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public void setTitle(CharSequence title) { -        if (DEBUG) Log.d(TAG, "[setTitle] title: " + title); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setTitle] title: " + title);          dispatchTitleChanged(title, 0);      }      @Override      public ActionMode startActionMode(ActionMode.Callback callback) { -        if (DEBUG) Log.d(TAG, "[startActionMode] callback: " + callback); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[startActionMode] callback: " + callback);          if (mActionMode != null) {              mActionMode.finish(); @@ -215,7 +208,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public void dispatchConfigurationChanged(Configuration newConfig) { -        if (DEBUG) Log.d(TAG, "[dispatchConfigurationChanged] newConfig: " + newConfig); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchConfigurationChanged] newConfig: " + newConfig);          if (aActionBar != null) {              aActionBar.onConfigurationChanged(newConfig); @@ -224,7 +217,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public void dispatchPostResume() { -        if (DEBUG) Log.d(TAG, "[dispatchPostResume]"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchPostResume]");          if (aActionBar != null) {              aActionBar.setShowHideAnimationEnabled(true); @@ -233,7 +226,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public void dispatchPause() { -        if (DEBUG) Log.d(TAG, "[dispatchPause]"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchPause]");          if (wActionBar != null && wActionBar.isOverflowMenuShowing()) {              wActionBar.hideOverflowMenu(); @@ -242,7 +235,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public void dispatchStop() { -        if (DEBUG) Log.d(TAG, "[dispatchStop]"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchStop]");          if (aActionBar != null) {              aActionBar.setShowHideAnimationEnabled(false); @@ -251,7 +244,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public void dispatchInvalidateOptionsMenu() { -        if (DEBUG) Log.d(TAG, "[dispatchInvalidateOptionsMenu]"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchInvalidateOptionsMenu]");          Bundle savedActionViewStates = null;          if (mMenu != null) { @@ -275,7 +268,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public boolean dispatchOpenOptionsMenu() { -        if (DEBUG) Log.d(TAG, "[dispatchOpenOptionsMenu]"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchOpenOptionsMenu]");          if (!isReservingOverflow()) {              return false; @@ -286,7 +279,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public boolean dispatchCloseOptionsMenu() { -        if (DEBUG) Log.d(TAG, "[dispatchCloseOptionsMenu]"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchCloseOptionsMenu]");          if (!isReservingOverflow()) {              return false; @@ -300,7 +293,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public void dispatchPostCreate(Bundle savedInstanceState) { -        if (DEBUG) Log.d(TAG, "[dispatchOnPostCreate]"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchOnPostCreate]");          if (mIsDelegate) {              mIsTitleReady = true; @@ -313,7 +306,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public boolean dispatchCreateOptionsMenu(android.view.Menu menu) { -        if (DEBUG) { +        if (BuildConfig.DEBUG) {              Log.d(TAG, "[dispatchCreateOptionsMenu] android.view.Menu: " + menu);              Log.d(TAG, "[dispatchCreateOptionsMenu] returning true");          } @@ -322,7 +315,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public boolean dispatchPrepareOptionsMenu(android.view.Menu menu) { -        if (DEBUG) Log.d(TAG, "[dispatchPrepareOptionsMenu] android.view.Menu: " + menu); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchPrepareOptionsMenu] android.view.Menu: " + menu);          if (mActionMode != null) {              return false; @@ -348,7 +341,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu          }          boolean result = mMenu.bindNativeOverflow(menu, this, mNativeItemMap); -        if (DEBUG) Log.d(TAG, "[dispatchPrepareOptionsMenu] returning " + result); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchPrepareOptionsMenu] returning " + result);          return result;      } @@ -359,7 +352,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public boolean dispatchMenuOpened(int featureId, android.view.Menu menu) { -        if (DEBUG) Log.d(TAG, "[dispatchMenuOpened] featureId: " + featureId + ", menu: " + menu); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchMenuOpened] featureId: " + featureId + ", menu: " + menu);          if (featureId == Window.FEATURE_ACTION_BAR || featureId == Window.FEATURE_OPTIONS_PANEL) {              if (aActionBar != null) { @@ -373,7 +366,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public void dispatchPanelClosed(int featureId, android.view.Menu menu){ -        if (DEBUG) Log.d(TAG, "[dispatchPanelClosed] featureId: " + featureId + ", menu: " + menu); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchPanelClosed] featureId: " + featureId + ", menu: " + menu);          if (featureId == Window.FEATURE_ACTION_BAR || featureId == Window.FEATURE_OPTIONS_PANEL) {              if (aActionBar != null) { @@ -384,22 +377,16 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public void dispatchTitleChanged(CharSequence title, int color) { -        if (DEBUG) Log.d(TAG, "[dispatchTitleChanged] title: " + title + ", color: " + color); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchTitleChanged] title: " + title + ", color: " + color); -        if (!mIsDelegate || mIsTitleReady) { -            if (mTitleView != null) { -                mTitleView.setText(title); -            } else if (wActionBar != null) { -                wActionBar.setWindowTitle(title); -            } +        if ((!mIsDelegate || mIsTitleReady) && (wActionBar != null)) { +            wActionBar.setWindowTitle(title);          } - -        mTitle = title;      }      @Override      public boolean dispatchKeyEvent(KeyEvent event) { -        if (DEBUG) Log.d(TAG, "[dispatchKeyEvent] event: " + event); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchKeyEvent] event: " + event);          final int keyCode = event.getKeyCode(); @@ -412,7 +399,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu                  if (action == KeyEvent.ACTION_UP) {                      mActionMode.finish();                  } -                if (DEBUG) Log.d(TAG, "[dispatchKeyEvent] returning true"); +                if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchKeyEvent] returning true");                  return true;              } @@ -421,12 +408,12 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu                  if (action == KeyEvent.ACTION_UP) {                      wActionBar.collapseActionView();                  } -                if (DEBUG) Log.d(TAG, "[dispatchKeyEvent] returning true"); +                if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchKeyEvent] returning true");                  return true;              }          } -        if (DEBUG) Log.d(TAG, "[dispatchKeyEvent] returning false"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchKeyEvent] returning false");          return false;      } @@ -596,7 +583,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public boolean onMenuItemClick(android.view.MenuItem item) { -        if (DEBUG) Log.d(TAG, "[mNativeItemListener.onMenuItemClick] item: " + item); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[mNativeItemListener.onMenuItemClick] item: " + item);          final MenuItemImpl sherlockItem = mNativeItemMap.get(item);          if (sherlockItem != null) { @@ -620,7 +607,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public void setProgressBarVisibility(boolean visible) { -        if (DEBUG) Log.d(TAG, "[setProgressBarVisibility] visible: " + visible); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setProgressBarVisibility] visible: " + visible);          setFeatureInt(Window.FEATURE_PROGRESS, visible ? Window.PROGRESS_VISIBILITY_ON :              Window.PROGRESS_VISIBILITY_OFF); @@ -628,7 +615,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public void setProgressBarIndeterminateVisibility(boolean visible) { -        if (DEBUG) Log.d(TAG, "[setProgressBarIndeterminateVisibility] visible: " + visible); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setProgressBarIndeterminateVisibility] visible: " + visible);          setFeatureInt(Window.FEATURE_INDETERMINATE_PROGRESS,                  visible ? Window.PROGRESS_VISIBILITY_ON : Window.PROGRESS_VISIBILITY_OFF); @@ -636,7 +623,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public void setProgressBarIndeterminate(boolean indeterminate) { -        if (DEBUG) Log.d(TAG, "[setProgressBarIndeterminate] indeterminate: " + indeterminate); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setProgressBarIndeterminate] indeterminate: " + indeterminate);          setFeatureInt(Window.FEATURE_PROGRESS,                  indeterminate ? Window.PROGRESS_INDETERMINATE_ON : Window.PROGRESS_INDETERMINATE_OFF); @@ -644,14 +631,14 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public void setProgress(int progress) { -        if (DEBUG) Log.d(TAG, "[setProgress] progress: " + progress); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setProgress] progress: " + progress);          setFeatureInt(Window.FEATURE_PROGRESS, progress + Window.PROGRESS_START);      }      @Override      public void setSecondaryProgress(int secondaryProgress) { -        if (DEBUG) Log.d(TAG, "[setSecondaryProgress] secondaryProgress: " + secondaryProgress); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setSecondaryProgress] secondaryProgress: " + secondaryProgress);          setFeatureInt(Window.FEATURE_PROGRESS,                  secondaryProgress + Window.PROGRESS_SECONDARY_START); @@ -790,23 +777,23 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      ///////////////////////////////////////////////////////////////////////////      private int getFeatures() { -        if (DEBUG) Log.d(TAG, "[getFeatures] returning " + mFeatures); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[getFeatures] returning " + mFeatures);          return mFeatures;      }      @Override      public boolean hasFeature(int featureId) { -        if (DEBUG) Log.d(TAG, "[hasFeature] featureId: " + featureId); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[hasFeature] featureId: " + featureId);          boolean result = (mFeatures & (1 << featureId)) != 0; -        if (DEBUG) Log.d(TAG, "[hasFeature] returning " + result); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[hasFeature] returning " + result);          return result;      }      @Override      public boolean requestFeature(int featureId) { -        if (DEBUG) Log.d(TAG, "[requestFeature] featureId: " + featureId); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[requestFeature] featureId: " + featureId);          if (mContentParent != null) {              throw new AndroidRuntimeException("requestFeature() must be called before adding content"); @@ -829,21 +816,21 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public void setUiOptions(int uiOptions) { -        if (DEBUG) Log.d(TAG, "[setUiOptions] uiOptions: " + uiOptions); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setUiOptions] uiOptions: " + uiOptions);          mUiOptions = uiOptions;      }      @Override      public void setUiOptions(int uiOptions, int mask) { -        if (DEBUG) Log.d(TAG, "[setUiOptions] uiOptions: " + uiOptions + ", mask: " + mask); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setUiOptions] uiOptions: " + uiOptions + ", mask: " + mask);          mUiOptions = (mUiOptions & ~mask) | (uiOptions & mask);      }      @Override      public void setContentView(int layoutResId) { -        if (DEBUG) Log.d(TAG, "[setContentView] layoutResId: " + layoutResId); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setContentView] layoutResId: " + layoutResId);          if (mContentParent == null) {              installDecor(); @@ -862,7 +849,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public void setContentView(View view, ViewGroup.LayoutParams params) { -        if (DEBUG) Log.d(TAG, "[setContentView] view: " + view + ", params: " + params); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setContentView] view: " + view + ", params: " + params);          if (mContentParent == null) {              installDecor(); @@ -881,7 +868,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      @Override      public void addContentView(View view, ViewGroup.LayoutParams params) { -        if (DEBUG) Log.d(TAG, "[addContentView] view: " + view + ", params: " + params); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[addContentView] view: " + view + ", params: " + params);          if (mContentParent == null) {              installDecor(); @@ -892,7 +879,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu      }      private void installDecor() { -        if (DEBUG) Log.d(TAG, "[installDecor]"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[installDecor]");          if (mDecor == null) {              mDecor = (ViewGroup)mActivity.getWindow().getDecorView().findViewById(android.R.id.content); @@ -921,84 +908,70 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu                  }              } -            mTitleView = (TextView)mDecor.findViewById(android.R.id.title); -            if (mTitleView != null) { -                if (hasFeature(Window.FEATURE_NO_TITLE)) { -                    mTitleView.setVisibility(View.GONE); -                    if (mContentParent instanceof FrameLayout) { -                        ((FrameLayout)mContentParent).setForeground(null); -                    } -                } else { -                    mTitleView.setText(mTitle); +            wActionBar = (ActionBarView)mDecor.findViewById(R.id.abs__action_bar); +            if (wActionBar != null) { +                wActionBar.setWindowCallback(this); +                if (wActionBar.getTitle() == null) { +                    wActionBar.setWindowTitle(mActivity.getTitle()); +                } +                if (hasFeature(Window.FEATURE_PROGRESS)) { +                    wActionBar.initProgress(); +                } +                if (hasFeature(Window.FEATURE_INDETERMINATE_PROGRESS)) { +                    wActionBar.initIndeterminateProgress();                  } -            } else { -                wActionBar = (ActionBarView)mDecor.findViewById(R.id.abs__action_bar); -                if (wActionBar != null) { -                    wActionBar.setWindowCallback(this); -                    if (wActionBar.getTitle() == null) { -                        wActionBar.setWindowTitle(mActivity.getTitle()); -                    } -                    if (hasFeature(Window.FEATURE_PROGRESS)) { -                        wActionBar.initProgress(); -                    } -                    if (hasFeature(Window.FEATURE_INDETERMINATE_PROGRESS)) { -                        wActionBar.initIndeterminateProgress(); -                    } -                    //Since we don't require onCreate dispatching, parse for uiOptions here -                    int uiOptions = loadUiOptionsFromManifest(mActivity); -                    if (uiOptions != 0) { -                        mUiOptions = uiOptions; -                    } +                //Since we don't require onCreate dispatching, parse for uiOptions here +                int uiOptions = loadUiOptionsFromManifest(mActivity); +                if (uiOptions != 0) { +                    mUiOptions = uiOptions; +                } -                    boolean splitActionBar = false; -                    final boolean splitWhenNarrow = (mUiOptions & ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW) != 0; -                    if (splitWhenNarrow) { -                        splitActionBar = getResources_getBoolean(mActivity, R.bool.abs__split_action_bar_is_narrow); -                    } else { -                        splitActionBar = mActivity.getTheme() -                                .obtainStyledAttributes(R.styleable.SherlockTheme) -                                .getBoolean(R.styleable.SherlockTheme_windowSplitActionBar, false); -                    } -                    final ActionBarContainer splitView = (ActionBarContainer)mDecor.findViewById(R.id.abs__split_action_bar); -                    if (splitView != null) { -                        wActionBar.setSplitView(splitView); -                        wActionBar.setSplitActionBar(splitActionBar); -                        wActionBar.setSplitWhenNarrow(splitWhenNarrow); - -                        mActionModeView = (ActionBarContextView)mDecor.findViewById(R.id.abs__action_context_bar); -                        mActionModeView.setSplitView(splitView); -                        mActionModeView.setSplitActionBar(splitActionBar); -                        mActionModeView.setSplitWhenNarrow(splitWhenNarrow); -                    } else if (splitActionBar) { -                        Log.e(TAG, "Requested split action bar with incompatible window decor! Ignoring request."); -                    } +                boolean splitActionBar = false; +                final boolean splitWhenNarrow = (mUiOptions & ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW) != 0; +                if (splitWhenNarrow) { +                    splitActionBar = getResources_getBoolean(mActivity, R.bool.abs__split_action_bar_is_narrow); +                } else { +                    splitActionBar = mActivity.getTheme() +                            .obtainStyledAttributes(R.styleable.SherlockTheme) +                            .getBoolean(R.styleable.SherlockTheme_windowSplitActionBar, false); +                } +                final ActionBarContainer splitView = (ActionBarContainer)mDecor.findViewById(R.id.abs__split_action_bar); +                if (splitView != null) { +                    wActionBar.setSplitView(splitView); +                    wActionBar.setSplitActionBar(splitActionBar); +                    wActionBar.setSplitWhenNarrow(splitWhenNarrow); + +                    mActionModeView = (ActionBarContextView)mDecor.findViewById(R.id.abs__action_context_bar); +                    mActionModeView.setSplitView(splitView); +                    mActionModeView.setSplitActionBar(splitActionBar); +                    mActionModeView.setSplitWhenNarrow(splitWhenNarrow); +                } else if (splitActionBar) { +                    Log.e(TAG, "Requested split action bar with incompatible window decor! Ignoring request."); +                } -                    // Post the panel invalidate for later; avoid application onCreateOptionsMenu -                    // being called in the middle of onCreate or similar. -                    mDecor.post(new Runnable() { -                        @Override -                        public void run() { -                            //Invalidate if the panel menu hasn't been created before this. -                            if (!mIsDestroyed && !mActivity.isFinishing() && mMenu == null) { -                                dispatchInvalidateOptionsMenu(); -                            } +                // Post the panel invalidate for later; avoid application onCreateOptionsMenu +                // being called in the middle of onCreate or similar. +                mDecor.post(new Runnable() { +                    @Override +                    public void run() { +                        //Invalidate if the panel menu hasn't been created before this. +                        if (!mIsDestroyed && !mActivity.isFinishing() && mMenu == null) { +                            dispatchInvalidateOptionsMenu();                          } -                    }); -                } +                    } +                });              }          }      }      private ViewGroup generateLayout() { -        if (DEBUG) Log.d(TAG, "[generateLayout]"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[generateLayout]");          // Apply data from current theme.          TypedArray a = mActivity.getTheme().obtainStyledAttributes(R.styleable.SherlockTheme); -        mIsFloating = a.getBoolean(R.styleable.SherlockTheme_android_windowIsFloating, false); -          if (!a.hasValue(R.styleable.SherlockTheme_windowActionBar)) {              throw new IllegalStateException("You must use Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar, or a derivative.");          } @@ -1022,18 +995,10 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu          int layoutResource;          if (!hasFeature(Window.FEATURE_NO_TITLE)) { -            if (mIsFloating) { -                //Trash original dialog LinearLayout -                mDecor = (ViewGroup)mDecor.getParent(); -                mDecor.removeAllViews(); - -                layoutResource = R.layout.abs__dialog_title_holo; +            if (hasFeature(Window.FEATURE_ACTION_BAR_OVERLAY)) { +                layoutResource = R.layout.abs__screen_action_bar_overlay;              } else { -                if (hasFeature(Window.FEATURE_ACTION_BAR_OVERLAY)) { -                    layoutResource = R.layout.abs__screen_action_bar_overlay; -                } else { -                    layoutResource = R.layout.abs__screen_action_bar; -                } +                layoutResource = R.layout.abs__screen_action_bar;              }          } else if (hasFeature(Window.FEATURE_ACTION_MODE_OVERLAY) && !hasFeature(Window.FEATURE_NO_TITLE)) {              layoutResource = R.layout.abs__screen_simple_overlay_action_mode; @@ -1041,7 +1006,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu              layoutResource = R.layout.abs__screen_simple;          } -        if (DEBUG) Log.d(TAG, "[generateLayout] using screen XML " + mActivity.getResources().getString(layoutResource)); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[generateLayout] using screen XML " + mActivity.getResources().getString(layoutResource));          View in = mActivity.getLayoutInflater().inflate(layoutResource, null);          mDecor.addView(in, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)); @@ -1086,7 +1051,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu          int uiOptions = 0;          try {              final String thisPackage = activity.getClass().getName(); -            if (DEBUG) Log.i(TAG, "Parsing AndroidManifest.xml for " + thisPackage); +            if (ActionBarSherlock.DEBUG) Log.i(TAG, "Parsing AndroidManifest.xml for " + thisPackage);              final String packageName = activity.getApplicationInfo().packageName;              final AssetManager am = activity.createPackageContext(packageName, 0).getAssets(); @@ -1099,10 +1064,10 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu                      if ("application".equals(name)) {                          //Check if the <application> has the attribute -                        if (DEBUG) Log.d(TAG, "Got <application>"); +                        if (ActionBarSherlock.DEBUG) Log.d(TAG, "Got <application>");                          for (int i = xml.getAttributeCount() - 1; i >= 0; i--) { -                            if (DEBUG) Log.d(TAG, xml.getAttributeName(i) + ": " + xml.getAttributeValue(i)); +                            if (ActionBarSherlock.DEBUG) Log.d(TAG, xml.getAttributeName(i) + ": " + xml.getAttributeValue(i));                              if ("uiOptions".equals(xml.getAttributeName(i))) {                                  uiOptions = xml.getAttributeIntValue(i, 0); @@ -1111,13 +1076,13 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu                          }                      } else if ("activity".equals(name)) {                          //Check if the <activity> is us and has the attribute -                        if (DEBUG) Log.d(TAG, "Got <activity>"); +                        if (ActionBarSherlock.DEBUG) Log.d(TAG, "Got <activity>");                          Integer activityUiOptions = null;                          String activityPackage = null;                          boolean isOurActivity = false;                          for (int i = xml.getAttributeCount() - 1; i >= 0; i--) { -                            if (DEBUG) Log.d(TAG, xml.getAttributeName(i) + ": " + xml.getAttributeValue(i)); +                            if (ActionBarSherlock.DEBUG) Log.d(TAG, xml.getAttributeName(i) + ": " + xml.getAttributeValue(i));                              //We need both uiOptions and name attributes                              String attrName = xml.getAttributeName(i); @@ -1149,7 +1114,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu          } catch (Exception e) {              e.printStackTrace();          } -        if (DEBUG) Log.i(TAG, "Returning " + Integer.toHexString(uiOptions)); +        if (ActionBarSherlock.DEBUG) Log.i(TAG, "Returning " + Integer.toHexString(uiOptions));          return uiOptions;      } @@ -1200,4 +1165,13 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu              mActionMode = null;          }      } + +    @Override +    public void ensureActionBar() { +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[ensureActionBar]"); + +        if (mDecor == null) { +            initActionBar(); +        } +    }  } diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockNative.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockNative.java index 0824d3848..5a47e0c37 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockNative.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockNative.java @@ -1,19 +1,21 @@  package com.actionbarsherlock.internal; -import com.actionbarsherlock.ActionBarSherlock; -import com.actionbarsherlock.app.ActionBar; -import com.actionbarsherlock.internal.app.ActionBarWrapper; -import com.actionbarsherlock.internal.view.menu.MenuWrapper; -import com.actionbarsherlock.view.ActionMode; -import com.actionbarsherlock.view.MenuInflater;  import android.app.Activity;  import android.content.Context;  import android.util.Log;  import android.util.TypedValue;  import android.view.ContextThemeWrapper;  import android.view.View; -import android.view.Window;  import android.view.ViewGroup.LayoutParams; +import android.view.Window; +import com.actionbarsherlock.ActionBarSherlock; +import com.actionbarsherlock.app.ActionBar; +import com.actionbarsherlock.internal.app.ActionBarWrapper; +import com.actionbarsherlock.internal.view.menu.MenuItemWrapper; +import com.actionbarsherlock.internal.view.menu.MenuWrapper; +import com.actionbarsherlock.view.ActionMode; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem;  @ActionBarSherlock.Implementation(api = 14)  public class ActionBarSherlockNative extends ActionBarSherlock { @@ -28,7 +30,7 @@ public class ActionBarSherlockNative extends ActionBarSherlock {      @Override      public ActionBar getActionBar() { -        if (DEBUG) Log.d(TAG, "[getActionBar]"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[getActionBar]");          initActionBar();          return mActionBar; @@ -44,77 +46,89 @@ public class ActionBarSherlockNative extends ActionBarSherlock {      @Override      public void dispatchInvalidateOptionsMenu() { -        if (DEBUG) Log.d(TAG, "[dispatchInvalidateOptionsMenu]"); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchInvalidateOptionsMenu]");          mActivity.getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL); + +        if (mMenu != null) mMenu.invalidate();      }      @Override      public boolean dispatchCreateOptionsMenu(android.view.Menu menu) { -        if (DEBUG) Log.d(TAG, "[dispatchCreateOptionsMenu] menu: " + menu); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchCreateOptionsMenu] menu: " + menu);          if (mMenu == null || menu != mMenu.unwrap()) {              mMenu = new MenuWrapper(menu);          }          final boolean result = callbackCreateOptionsMenu(mMenu); -        if (DEBUG) Log.d(TAG, "[dispatchCreateOptionsMenu] returning " + result); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchCreateOptionsMenu] returning " + result);          return result;      }      @Override      public boolean dispatchPrepareOptionsMenu(android.view.Menu menu) { -        if (DEBUG) Log.d(TAG, "[dispatchPrepareOptionsMenu] menu: " + menu); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchPrepareOptionsMenu] menu: " + menu);          final boolean result = callbackPrepareOptionsMenu(mMenu); -        if (DEBUG) Log.d(TAG, "[dispatchPrepareOptionsMenu] returning " + result); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchPrepareOptionsMenu] returning " + result);          return result;      }      @Override      public boolean dispatchOptionsItemSelected(android.view.MenuItem item) { -        if (DEBUG) Log.d(TAG, "[dispatchOptionsItemSelected] item: " + item.getTitleCondensed()); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchOptionsItemSelected] item: " + item.getTitleCondensed()); -        final boolean result = callbackOptionsItemSelected(mMenu.findItem(item)); -        if (DEBUG) Log.d(TAG, "[dispatchOptionsItemSelected] returning " + result); +        MenuItem wrapped; +        if (mMenu == null) { +            if (item.getItemId() != android.R.id.home) { +                throw new IllegalStateException("Non-home action item clicked before onCreateOptionsMenu with ID " + item.getItemId()); +            } +            // Create a throw-away wrapper for now. +            wrapped = new MenuItemWrapper(item); +        } else { +            wrapped = mMenu.findItem(item); +        } +        final boolean result = callbackOptionsItemSelected(wrapped); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[dispatchOptionsItemSelected] returning " + result);          return result;      }      @Override      public boolean hasFeature(int feature) { -        if (DEBUG) Log.d(TAG, "[hasFeature] feature: " + feature); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[hasFeature] feature: " + feature);          final boolean result = mActivity.getWindow().hasFeature(feature); -        if (DEBUG) Log.d(TAG, "[hasFeature] returning " + result); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[hasFeature] returning " + result);          return result;      }      @Override      public boolean requestFeature(int featureId) { -        if (DEBUG) Log.d(TAG, "[requestFeature] featureId: " + featureId); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[requestFeature] featureId: " + featureId);          final boolean result = mActivity.getWindow().requestFeature(featureId); -        if (DEBUG) Log.d(TAG, "[requestFeature] returning " + result); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[requestFeature] returning " + result);          return result;      }      @Override      public void setUiOptions(int uiOptions) { -        if (DEBUG) Log.d(TAG, "[setUiOptions] uiOptions: " + uiOptions); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setUiOptions] uiOptions: " + uiOptions);          mActivity.getWindow().setUiOptions(uiOptions);      }      @Override      public void setUiOptions(int uiOptions, int mask) { -        if (DEBUG) Log.d(TAG, "[setUiOptions] uiOptions: " + uiOptions + ", mask: " + mask); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setUiOptions] uiOptions: " + uiOptions + ", mask: " + mask);          mActivity.getWindow().setUiOptions(uiOptions, mask);      }      @Override      public void setContentView(int layoutResId) { -        if (DEBUG) Log.d(TAG, "[setContentView] layoutResId: " + layoutResId); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setContentView] layoutResId: " + layoutResId);          mActivity.getWindow().setContentView(layoutResId);          initActionBar(); @@ -122,7 +136,7 @@ public class ActionBarSherlockNative extends ActionBarSherlock {      @Override      public void setContentView(View view, LayoutParams params) { -        if (DEBUG) Log.d(TAG, "[setContentView] view: " + view + ", params: " + params); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setContentView] view: " + view + ", params: " + params);          mActivity.getWindow().setContentView(view, params);          initActionBar(); @@ -130,7 +144,7 @@ public class ActionBarSherlockNative extends ActionBarSherlock {      @Override      public void addContentView(View view, LayoutParams params) { -        if (DEBUG) Log.d(TAG, "[addContentView] view: " + view + ", params: " + params); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[addContentView] view: " + view + ", params: " + params);          mActivity.getWindow().addContentView(view, params);          initActionBar(); @@ -138,42 +152,42 @@ public class ActionBarSherlockNative extends ActionBarSherlock {      @Override      public void setTitle(CharSequence title) { -        if (DEBUG) Log.d(TAG, "[setTitle] title: " + title); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setTitle] title: " + title);          mActivity.getWindow().setTitle(title);      }      @Override      public void setProgressBarVisibility(boolean visible) { -        if (DEBUG) Log.d(TAG, "[setProgressBarVisibility] visible: " + visible); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setProgressBarVisibility] visible: " + visible);          mActivity.setProgressBarVisibility(visible);      }      @Override      public void setProgressBarIndeterminateVisibility(boolean visible) { -        if (DEBUG) Log.d(TAG, "[setProgressBarIndeterminateVisibility] visible: " + visible); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setProgressBarIndeterminateVisibility] visible: " + visible);          mActivity.setProgressBarIndeterminateVisibility(visible);      }      @Override      public void setProgressBarIndeterminate(boolean indeterminate) { -        if (DEBUG) Log.d(TAG, "[setProgressBarIndeterminate] indeterminate: " + indeterminate); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setProgressBarIndeterminate] indeterminate: " + indeterminate);          mActivity.setProgressBarIndeterminate(indeterminate);      }      @Override      public void setProgress(int progress) { -        if (DEBUG) Log.d(TAG, "[setProgress] progress: " + progress); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setProgress] progress: " + progress);          mActivity.setProgress(progress);      }      @Override      public void setSecondaryProgress(int secondaryProgress) { -        if (DEBUG) Log.d(TAG, "[setSecondaryProgress] secondaryProgress: " + secondaryProgress); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[setSecondaryProgress] secondaryProgress: " + secondaryProgress);          mActivity.setSecondaryProgress(secondaryProgress);      } @@ -194,7 +208,7 @@ public class ActionBarSherlockNative extends ActionBarSherlock {      @Override      public ActionMode startActionMode(com.actionbarsherlock.view.ActionMode.Callback callback) { -        if (DEBUG) Log.d(TAG, "[startActionMode] callback: " + callback); +        if (ActionBarSherlock.DEBUG) Log.d(TAG, "[startActionMode] callback: " + callback);          if (mActionMode != null) {              mActionMode.finish(); @@ -288,6 +302,7 @@ public class ActionBarSherlockNative extends ActionBarSherlock {          @Override          public void invalidate() {              mActionMode.invalidate(); +            if (mMenu != null) mMenu.invalidate();          }          @Override diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ResourcesCompat.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ResourcesCompat.java index 8e1efe8c5..4a3a1ca26 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ResourcesCompat.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ResourcesCompat.java @@ -1,11 +1,19 @@  package com.actionbarsherlock.internal; +import android.app.Activity;  import android.content.Context; +import android.content.res.AssetManager; +import android.content.res.XmlResourceParser;  import android.os.Build;  import android.util.DisplayMetrics; +import android.util.Log; +import com.actionbarsherlock.ActionBarSherlock;  import com.actionbarsherlock.R; +import org.xmlpull.v1.XmlPullParser;  public final class ResourcesCompat { +    private static final String TAG = "ResourcesCompat"; +      //No instances      private ResourcesCompat() {} @@ -15,14 +23,14 @@ public final class ResourcesCompat {       * can use to simulate filtering based on width and smallest width       * qualifiers on pre-3.2.       * -     * @param context Context to load booleans from on 3.2+ and to fetch the +     * @param context Context to load booleans from on 4.0+ and to fetch the       * display metrics.       * @param id Id of boolean to load.       * @return Associated boolean value as reflected by the current display       * metrics.       */      public static boolean getResources_getBoolean(Context context, int id) { -        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { +        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {              return context.getResources().getBoolean(id);          } @@ -92,4 +100,83 @@ public final class ResourcesCompat {          throw new IllegalArgumentException("Unknown integer resource ID " + id);      } + +    /** +     * Attempt to programmatically load the logo from the manifest file of an +     * activity by using an XML pull parser. This should allow us to read the +     * logo attribute regardless of the platform it is being run on. +     * +     * @param activity Activity instance. +     * @return Logo resource ID. +     */ +    public static int loadLogoFromManifest(Activity activity) { +        int logo = 0; +        try { +            final String thisPackage = activity.getClass().getName(); +            if (ActionBarSherlock.DEBUG) Log.i(TAG, "Parsing AndroidManifest.xml for " + thisPackage); + +            final String packageName = activity.getApplicationInfo().packageName; +            final AssetManager am = activity.createPackageContext(packageName, 0).getAssets(); +            final XmlResourceParser xml = am.openXmlResourceParser("AndroidManifest.xml"); + +            int eventType = xml.getEventType(); +            while (eventType != XmlPullParser.END_DOCUMENT) { +                if (eventType == XmlPullParser.START_TAG) { +                    String name = xml.getName(); + +                    if ("application".equals(name)) { +                        //Check if the <application> has the attribute +                        if (ActionBarSherlock.DEBUG) Log.d(TAG, "Got <application>"); + +                        for (int i = xml.getAttributeCount() - 1; i >= 0; i--) { +                            if (ActionBarSherlock.DEBUG) Log.d(TAG, xml.getAttributeName(i) + ": " + xml.getAttributeValue(i)); + +                            if ("logo".equals(xml.getAttributeName(i))) { +                                logo = xml.getAttributeResourceValue(i, 0); +                                break; //out of for loop +                            } +                        } +                    } else if ("activity".equals(name)) { +                        //Check if the <activity> is us and has the attribute +                        if (ActionBarSherlock.DEBUG) Log.d(TAG, "Got <activity>"); +                        Integer activityLogo = null; +                        String activityPackage = null; +                        boolean isOurActivity = false; + +                        for (int i = xml.getAttributeCount() - 1; i >= 0; i--) { +                            if (ActionBarSherlock.DEBUG) Log.d(TAG, xml.getAttributeName(i) + ": " + xml.getAttributeValue(i)); + +                            //We need both uiOptions and name attributes +                            String attrName = xml.getAttributeName(i); +                            if ("logo".equals(attrName)) { +                                activityLogo = xml.getAttributeResourceValue(i, 0); +                            } else if ("name".equals(attrName)) { +                                activityPackage = ActionBarSherlockCompat.cleanActivityName(packageName, xml.getAttributeValue(i)); +                                if (!thisPackage.equals(activityPackage)) { +                                    break; //on to the next +                                } +                                isOurActivity = true; +                            } + +                            //Make sure we have both attributes before processing +                            if ((activityLogo != null) && (activityPackage != null)) { +                                //Our activity, logo specified, override with our value +                                logo = activityLogo.intValue(); +                            } +                        } +                        if (isOurActivity) { +                            //If we matched our activity but it had no logo don't +                            //do any more processing of the manifest +                            break; +                        } +                    } +                } +                eventType = xml.nextToken(); +            } +        } catch (Exception e) { +            e.printStackTrace(); +        } +        if (ActionBarSherlock.DEBUG) Log.i(TAG, "Returning " + Integer.toHexString(logo)); +        return logo; +    }  } diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/app/ActionBarImpl.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/app/ActionBarImpl.java index d022a2465..14dc5a7c5 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/app/ActionBarImpl.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/app/ActionBarImpl.java @@ -170,7 +170,12 @@ public class ActionBarImpl extends ActionBar {          // Older apps get the home button interaction enabled by default.          // Newer apps need to enable it explicitly. -        setHomeButtonEnabled(mContext.getApplicationInfo().targetSdkVersion < 14); +        boolean homeButtonEnabled = mContext.getApplicationInfo().targetSdkVersion < Build.VERSION_CODES.ICE_CREAM_SANDWICH; + +        // If the homeAsUp display option is set, always enable the home button. +        homeButtonEnabled |= (mActionView.getDisplayOptions() & ActionBar.DISPLAY_HOME_AS_UP) != 0; + +        setHomeButtonEnabled(homeButtonEnabled);          setHasEmbeddedTabs(getResources_getBoolean(mContext,                  R.bool.abs__action_bar_embed_tabs)); @@ -321,7 +326,7 @@ public class ActionBarImpl extends ActionBar {              break;          default:              throw new IllegalStateException( -                    "setSelectedNavigationIndex not valid for current navigation mode"); +                    "setSelectedNavigationItem not valid for current navigation mode");          }      } diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java index 840cb3d27..fe479d0b8 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java @@ -26,6 +26,10 @@ public class ActionBarWrapper extends ActionBar implements android.app.ActionBar          mActionBar = activity.getActionBar();          if (mActionBar != null) {              mActionBar.addOnMenuVisibilityListener(this); + +            // Fixes issue #746 +            int displayOptions = mActionBar.getDisplayOptions(); +            mActionBar.setHomeButtonEnabled((displayOptions & DISPLAY_HOME_AS_UP) != 0);          }      } @@ -132,11 +136,19 @@ public class ActionBarWrapper extends ActionBar implements android.app.ActionBar      @Override      public void setDisplayOptions(int options) {          mActionBar.setDisplayOptions(options); + +        // Fixes issue #746 +        mActionBar.setHomeButtonEnabled((options & DISPLAY_HOME_AS_UP) != 0);      }      @Override      public void setDisplayOptions(int options, int mask) {          mActionBar.setDisplayOptions(options, mask); + +        // Fixes issue #746 +        if ((mask & DISPLAY_HOME_AS_UP) != 0) { +            mActionBar.setHomeButtonEnabled((options & DISPLAY_HOME_AS_UP) != 0); +        }      }      @Override diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator.java index d8a12c688..7f0f93efd 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/nineoldandroids/animation/ValueAnimator.java @@ -582,6 +582,7 @@ public class ValueAnimator extends Animator {           * active animations to process.           */          @Override +        @SuppressWarnings("fallthrough")          public void handleMessage(Message msg) {              boolean callAgain = true;              ArrayList<ValueAnimator> animations = sAnimations.get(); diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.java index dcb50f362..7d36c3b22 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/ActionMenuItemView.java @@ -37,6 +37,7 @@ import com.actionbarsherlock.R;  import com.actionbarsherlock.internal.view.View_HasStateListenerSupport;  import com.actionbarsherlock.internal.view.View_OnAttachStateChangeListener;  import com.actionbarsherlock.internal.widget.CapitalizingButton; +import com.actionbarsherlock.internal.widget.IcsToast;  import static com.actionbarsherlock.internal.ResourcesCompat.getResources_getBoolean; @@ -263,7 +264,7 @@ public class ActionMenuItemView extends LinearLayout          final int midy = screenPos[1] + height / 2;          final int screenWidth = context.getResources().getDisplayMetrics().widthPixels; -        Toast cheatSheet = Toast.makeText(context, mItemData.getTitle(), Toast.LENGTH_SHORT); +        Toast cheatSheet = IcsToast.makeText(context, mItemData.getTitle(), IcsToast.LENGTH_SHORT);          if (midy < displayFrame.height()) {              // Show along the top; follow action buttons              cheatSheet.setGravity(Gravity.TOP | Gravity.RIGHT, diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuBuilder.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuBuilder.java index 179b8f037..51bacd7be 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuBuilder.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuBuilder.java @@ -31,6 +31,7 @@ import android.content.pm.ResolveInfo;  import android.content.res.Configuration;  import android.content.res.Resources;  import android.graphics.drawable.Drawable; +import android.os.Build;  import android.os.Bundle;  import android.os.Parcelable;  import android.util.SparseArray; @@ -353,6 +354,11 @@ public class MenuBuilder implements Menu {          SparseArray<Parcelable> viewStates = states.getSparseParcelableArray(                  getActionViewStatesKey()); +        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB && viewStates == null) { +            //Fixes Issue #652 with sdk <= 2.3.6 +            return; +        } +          final int itemCount = size();          for (int i = 0; i < itemCount; i++) {              final MenuItem item = getItem(i); diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuPopupHelper.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuPopupHelper.java index f030de310..e49cd3190 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuPopupHelper.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuPopupHelper.java @@ -115,10 +115,20 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On          View anchor = mAnchorView;          if (anchor != null) { -            final boolean addGlobalListener = mTreeObserver == null; -            mTreeObserver = anchor.getViewTreeObserver(); // Refresh to latest -            if (addGlobalListener) mTreeObserver.addOnGlobalLayoutListener(this); -            ((View_HasStateListenerSupport)anchor).addOnAttachStateChangeListener(this); +            // Don't attach to the VTO unless the anchor itself is attached to avoid VTO-related leaks. +            if (anchor.getWindowToken() != null) { +                ViewTreeObserver vto = anchor.getViewTreeObserver(); +                if (vto != mTreeObserver) { +                    if (mTreeObserver != null && mTreeObserver.isAlive()) { +                        mTreeObserver.removeGlobalOnLayoutListener(this); +                    } +                    if ((mTreeObserver = vto) != null) { +                        vto.addOnGlobalLayoutListener(this); +                    } +                } +            } else if (anchor instanceof View_HasStateListenerSupport) { +                ((View_HasStateListenerSupport) anchor).addOnAttachStateChangeListener(this); +            }              mPopup.setAnchorView(anchor);          } else {              return false; @@ -141,11 +151,11 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On          mPopup = null;          mMenu.close();          if (mTreeObserver != null) { -            if (!mTreeObserver.isAlive()) mTreeObserver = mAnchorView.getViewTreeObserver(); -            mTreeObserver.removeGlobalOnLayoutListener(this); +            if (mTreeObserver.isAlive()) mTreeObserver.removeGlobalOnLayoutListener(this);              mTreeObserver = null; +        } else if (mAnchorView instanceof View_HasStateListenerSupport) { +            ((View_HasStateListenerSupport) mAnchorView).removeOnAttachStateChangeListener(this);          } -        ((View_HasStateListenerSupport)mAnchorView).removeOnAttachStateChangeListener(this);      }      public boolean isShowing() { @@ -207,15 +217,16 @@ public class MenuPopupHelper implements AdapterView.OnItemClickListener, View.On      @Override      public void onViewAttachedToWindow(View v) { +        ((View_HasStateListenerSupport) v).removeOnAttachStateChangeListener(this); + +        // The anchor wasn't attached in tryShow(), attach to the ViewRoot VTO now. +        if (mPopup != null && mTreeObserver == null) { +            (mTreeObserver = v.getViewTreeObserver()).addOnGlobalLayoutListener(this); +        }      }      @Override      public void onViewDetachedFromWindow(View v) { -        if (mTreeObserver != null) { -            if (!mTreeObserver.isAlive()) mTreeObserver = v.getViewTreeObserver(); -            mTreeObserver.removeGlobalOnLayoutListener(this); -        } -        ((View_HasStateListenerSupport)v).removeOnAttachStateChangeListener(this);      }      @Override diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuWrapper.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuWrapper.java index 3d4dd42fd..4eb8d09f4 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuWrapper.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/view/menu/MenuWrapper.java @@ -94,11 +94,18 @@ public class MenuWrapper implements Menu {      @Override      public void removeItem(int id) { +        mNativeMap.remove(mNativeMenu.findItem(id));          mNativeMenu.removeItem(id);      }      @Override      public void removeGroup(int groupId) { +        for (int i = 0; i < mNativeMenu.size(); i++) { +            final android.view.MenuItem item = mNativeMenu.getItem(i); +            if (item.getGroupId() == groupId) { +                mNativeMap.remove(item); +            } +        }          mNativeMenu.removeGroup(groupId);      } @@ -108,6 +115,20 @@ public class MenuWrapper implements Menu {          mNativeMenu.clear();      } +    public void invalidate() { +        if (mNativeMap.isEmpty()) return; + +        final WeakHashMap<android.view.MenuItem, MenuItem> menuMapCopy = new WeakHashMap<android.view.MenuItem, MenuItem>(mNativeMap.size()); + +        for (int i = 0; i < mNativeMenu.size(); i++) { +            final android.view.MenuItem item = mNativeMenu.getItem(i); +            menuMapCopy.put(item, mNativeMap.get(item)); +        } + +        mNativeMap.clear(); +        mNativeMap.putAll(menuMapCopy); +    } +      @Override      public void setGroupCheckable(int group, boolean checkable, boolean exclusive) {          mNativeMenu.setGroupCheckable(group, checkable, exclusive); diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarContainer.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarContainer.java index 1d9c68b37..0889825c0 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarContainer.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarContainer.java @@ -18,7 +18,6 @@ package com.actionbarsherlock.internal.widget;  import android.content.Context;  import android.content.res.TypedArray; -import android.graphics.Bitmap;  import android.graphics.Canvas;  import android.graphics.drawable.ColorDrawable;  import android.graphics.drawable.Drawable; @@ -27,7 +26,6 @@ import android.util.AttributeSet;  import android.view.MotionEvent;  import android.view.View;  import android.view.ViewGroup; -  import com.actionbarsherlock.R;  import com.actionbarsherlock.app.ActionBar;  import com.actionbarsherlock.internal.nineoldandroids.widget.NineFrameLayout; @@ -65,12 +63,7 @@ public class ActionBarContainer extends NineFrameLayout {          //Fix for issue #379          if (mStackedBackground instanceof ColorDrawable && Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { -            Bitmap bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); -            Canvas c = new Canvas(bitmap); -            mStackedBackground.draw(c); -            int color = bitmap.getPixel(0, 0); -            bitmap.recycle(); -            mStackedBackground = new IcsColorDrawable(color); +            mStackedBackground = new IcsColorDrawable((ColorDrawable) mStackedBackground);          }          if (getId() == R.id.abs__split_action_bar) { diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarView.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarView.java index 4636de17f..61e55b0a2 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarView.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ActionBarView.java @@ -16,16 +16,14 @@  package com.actionbarsherlock.internal.widget; -import org.xmlpull.v1.XmlPullParser; +import com.actionbarsherlock.internal.ResourcesCompat;  import android.app.Activity;  import android.content.Context;  import android.content.pm.ApplicationInfo;  import android.content.pm.PackageManager;  import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.AssetManager;  import android.content.res.Configuration;  import android.content.res.TypedArray; -import android.content.res.XmlResourceParser;  import android.graphics.drawable.Drawable;  import android.os.Build;  import android.os.Parcel; @@ -49,7 +47,6 @@ import android.widget.TextView;  import com.actionbarsherlock.R;  import com.actionbarsherlock.app.ActionBar;  import com.actionbarsherlock.app.ActionBar.OnNavigationListener; -import com.actionbarsherlock.internal.ActionBarSherlockCompat;  import com.actionbarsherlock.internal.view.menu.ActionMenuItem;  import com.actionbarsherlock.internal.view.menu.ActionMenuPresenter;  import com.actionbarsherlock.internal.view.menu.ActionMenuView; @@ -70,7 +67,6 @@ import static com.actionbarsherlock.internal.ResourcesCompat.getResources_getBoo   */  public class ActionBarView extends AbsActionBarView {      private static final String TAG = "ActionBarView"; -    private static final boolean DEBUG = false;      /**       * Display options applied by default @@ -190,7 +186,7 @@ public class ActionBarView extends AbsActionBarView {                  if (context instanceof Activity) {                      //Even though native methods existed in API 9 and 10 they don't work                      //so just parse the manifest to look for the logo pre-Honeycomb -                    final int resId = loadLogoFromManifest((Activity) context); +                    final int resId = ResourcesCompat.loadLogoFromManifest((Activity) context);                      if (resId != 0) {                          mLogo = context.getResources().getDrawable(resId);                      } @@ -265,85 +261,6 @@ public class ActionBarView extends AbsActionBarView {          mHomeLayout.setFocusable(true);      } -    /** -     * Attempt to programmatically load the logo from the manifest file of an -     * activity by using an XML pull parser. This should allow us to read the -     * logo attribute regardless of the platform it is being run on. -     * -     * @param activity Activity instance. -     * @return Logo resource ID. -     */ -    private static int loadLogoFromManifest(Activity activity) { -        int logo = 0; -        try { -            final String thisPackage = activity.getClass().getName(); -            if (DEBUG) Log.i(TAG, "Parsing AndroidManifest.xml for " + thisPackage); - -            final String packageName = activity.getApplicationInfo().packageName; -            final AssetManager am = activity.createPackageContext(packageName, 0).getAssets(); -            final XmlResourceParser xml = am.openXmlResourceParser("AndroidManifest.xml"); - -            int eventType = xml.getEventType(); -            while (eventType != XmlPullParser.END_DOCUMENT) { -                if (eventType == XmlPullParser.START_TAG) { -                    String name = xml.getName(); - -                    if ("application".equals(name)) { -                        //Check if the <application> has the attribute -                        if (DEBUG) Log.d(TAG, "Got <application>"); - -                        for (int i = xml.getAttributeCount() - 1; i >= 0; i--) { -                            if (DEBUG) Log.d(TAG, xml.getAttributeName(i) + ": " + xml.getAttributeValue(i)); - -                            if ("logo".equals(xml.getAttributeName(i))) { -                                logo = xml.getAttributeResourceValue(i, 0); -                                break; //out of for loop -                            } -                        } -                    } else if ("activity".equals(name)) { -                        //Check if the <activity> is us and has the attribute -                        if (DEBUG) Log.d(TAG, "Got <activity>"); -                        Integer activityLogo = null; -                        String activityPackage = null; -                        boolean isOurActivity = false; - -                        for (int i = xml.getAttributeCount() - 1; i >= 0; i--) { -                            if (DEBUG) Log.d(TAG, xml.getAttributeName(i) + ": " + xml.getAttributeValue(i)); - -                            //We need both uiOptions and name attributes -                            String attrName = xml.getAttributeName(i); -                            if ("logo".equals(attrName)) { -                                activityLogo = xml.getAttributeResourceValue(i, 0); -                            } else if ("name".equals(attrName)) { -                                activityPackage = ActionBarSherlockCompat.cleanActivityName(packageName, xml.getAttributeValue(i)); -                                if (!thisPackage.equals(activityPackage)) { -                                    break; //on to the next -                                } -                                isOurActivity = true; -                            } - -                            //Make sure we have both attributes before processing -                            if ((activityLogo != null) && (activityPackage != null)) { -                                //Our activity, logo specified, override with our value -                                logo = activityLogo.intValue(); -                            } -                        } -                        if (isOurActivity) { -                            //If we matched our activity but it had no logo don't -                            //do any more processing of the manifest -                            break; -                        } -                    } -                } -                eventType = xml.nextToken(); -            } -        } catch (Exception e) { -            e.printStackTrace(); -        } -        if (DEBUG) Log.i(TAG, "Returning " + Integer.toHexString(logo)); -        return logo; -    } -      /*       * Must be public so we can dispatch pre-2.2 via ActionBarImpl.       */ diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/CapitalizingButton.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/CapitalizingButton.java index fa3698f3b..9c658d561 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/CapitalizingButton.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/CapitalizingButton.java @@ -12,9 +12,14 @@ public class CapitalizingButton extends Button {      private static final boolean IS_GINGERBREAD = Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD;      private static final int[] R_styleable_Button = new int[] { +        android.R.attr.textAppearance +    }; +    private static final int R_styleable_Button_textAppearance = 0; + +    private static final int[] R_styleable_TextAppearance = new int[] {          android.R.attr.textAllCaps      }; -    private static final int R_styleable_Button_textAllCaps = 0; +    private static final int R_styleable_TextAppearance_textAllCaps = 0;      private boolean mAllCaps; @@ -22,14 +27,26 @@ public class CapitalizingButton extends Button {          super(context, attrs);          TypedArray a = context.obtainStyledAttributes(attrs, R_styleable_Button); -        mAllCaps = a.getBoolean(R_styleable_Button_textAllCaps, true); +        int ap = a.getResourceId(R_styleable_Button_textAppearance, -1);          a.recycle(); +        if (ap != -1) { +            TypedArray appearance = context.obtainStyledAttributes(ap, R_styleable_TextAppearance); +            if (appearance != null) { +                mAllCaps = appearance.getBoolean(R_styleable_TextAppearance_textAllCaps, true); +                appearance.recycle(); +            } +        }      }      public void setTextCompat(CharSequence text) {          if (SANS_ICE_CREAM && mAllCaps && text != null) {              if (IS_GINGERBREAD) { -                setText(text.toString().toUpperCase(Locale.ROOT)); +                try { +                    setText(text.toString().toUpperCase(Locale.ROOT)); +                } catch (NoSuchFieldError e) { +                    //Some manufacturer broke Locale.ROOT. See #572. +                    setText(text.toString().toUpperCase()); +                }              } else {                  setText(text.toString().toUpperCase());              } diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/FakeDialogPhoneWindow.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/FakeDialogPhoneWindow.java deleted file mode 100644 index ad1b4f0a8..000000000 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/FakeDialogPhoneWindow.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.actionbarsherlock.internal.widget; - -import static android.view.View.MeasureSpec.EXACTLY; -import android.content.Context; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.util.DisplayMetrics; -import android.util.TypedValue; -import android.widget.LinearLayout; -import com.actionbarsherlock.R; - -public class FakeDialogPhoneWindow extends LinearLayout { -    final TypedValue mMinWidthMajor = new TypedValue(); -    final TypedValue mMinWidthMinor = new TypedValue(); - -    public FakeDialogPhoneWindow(Context context, AttributeSet attrs) { -        super(context, attrs); - -        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SherlockTheme); - -        a.getValue(R.styleable.SherlockTheme_windowMinWidthMajor, mMinWidthMajor); -        a.getValue(R.styleable.SherlockTheme_windowMinWidthMinor, mMinWidthMinor); - -        a.recycle(); -    } - -    /* Stolen from PhoneWindow */ -    @Override -    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { -        final DisplayMetrics metrics = getContext().getResources().getDisplayMetrics(); -        final boolean isPortrait = metrics.widthPixels < metrics.heightPixels; - -        super.onMeasure(widthMeasureSpec, heightMeasureSpec); - -        int width = getMeasuredWidth(); -        boolean measure = false; - -        widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, EXACTLY); - -        final TypedValue tv = isPortrait ? mMinWidthMinor : mMinWidthMajor; - -        if (tv.type != TypedValue.TYPE_NULL) { -            final int min; -            if (tv.type == TypedValue.TYPE_DIMENSION) { -                min = (int)tv.getDimension(metrics); -            } else if (tv.type == TypedValue.TYPE_FRACTION) { -                min = (int)tv.getFraction(metrics.widthPixels, metrics.widthPixels); -            } else { -                min = 0; -            } - -            if (width < min) { -                widthMeasureSpec = MeasureSpec.makeMeasureSpec(min, EXACTLY); -                measure = true; -            } -        } - -        // TODO: Support height? - -        if (measure) { -            super.onMeasure(widthMeasureSpec, heightMeasureSpec); -        } -    } -} diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsColorDrawable.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsColorDrawable.java index a78b3f71b..3e022e63a 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsColorDrawable.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsColorDrawable.java @@ -1,8 +1,10 @@  package com.actionbarsherlock.internal.widget; +import android.graphics.Bitmap;  import android.graphics.Canvas;  import android.graphics.ColorFilter;  import android.graphics.Paint; +import android.graphics.drawable.ColorDrawable;  import android.graphics.drawable.Drawable;  /** @@ -12,6 +14,14 @@ public class IcsColorDrawable extends Drawable {      private int color;      private final Paint paint = new Paint(); +    public IcsColorDrawable(ColorDrawable drawable) { +        Bitmap bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); +        Canvas c = new Canvas(bitmap); +        drawable.draw(c); +        this.color = bitmap.getPixel(0, 0); +        bitmap.recycle(); +    } +      public IcsColorDrawable(int color) {          this.color = color;      } @@ -26,7 +36,7 @@ public class IcsColorDrawable extends Drawable {      @Override      public void setAlpha(int alpha) {          if (alpha != (color >>> 24)) { -            color = (color & 0x00FFFFFF) & (alpha << 24); +            color = (color & 0x00FFFFFF) | (alpha << 24);              invalidateSelf();          }      } diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsLinearLayout.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsLinearLayout.java index 4947c41df..b7c6ff318 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsLinearLayout.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsLinearLayout.java @@ -3,10 +3,11 @@ package com.actionbarsherlock.internal.widget;  import android.content.Context;  import android.content.res.TypedArray;  import android.graphics.Canvas; +import android.graphics.drawable.ColorDrawable;  import android.graphics.drawable.Drawable; +import android.os.Build;  import android.util.AttributeSet;  import android.view.View; -import android.widget.LinearLayout;  import com.actionbarsherlock.internal.nineoldandroids.widget.NineLinearLayout; @@ -20,14 +21,12 @@ import com.actionbarsherlock.internal.nineoldandroids.widget.NineLinearLayout;  public class IcsLinearLayout extends NineLinearLayout {      private static final int[] R_styleable_LinearLayout = new int[] {          /* 0 */ android.R.attr.divider, -        /* 1 */ android.R.attr.measureWithLargestChild,          /* 2 */ android.R.attr.showDividers,          /* 3 */ android.R.attr.dividerPadding,      };      private static final int LinearLayout_divider = 0; -    private static final int LinearLayout_measureWithLargestChild = 1; -    private static final int LinearLayout_showDividers = 2; -    private static final int LinearLayout_dividerPadding = 3; +    private static final int LinearLayout_showDividers = 1; +    private static final int LinearLayout_dividerPadding = 2;      /**       * Don't show any dividers. @@ -53,8 +52,6 @@ public class IcsLinearLayout extends NineLinearLayout {      private int mShowDividers;      private int mDividerPadding; -    private boolean mUseLargestChild; -      public IcsLinearLayout(Context context, AttributeSet attrs) {          super(context, attrs); @@ -63,7 +60,6 @@ public class IcsLinearLayout extends NineLinearLayout {          setDividerDrawable(a.getDrawable(/*com.android.internal.R.styleable.*/LinearLayout_divider));          mShowDividers = a.getInt(/*com.android.internal.R.styleable.*/LinearLayout_showDividers, SHOW_DIVIDER_NONE);          mDividerPadding = a.getDimensionPixelSize(/*com.android.internal.R.styleable.*/LinearLayout_dividerPadding, 0); -        mUseLargestChild = a.getBoolean(/*com.android.internal.R.styleable.*/LinearLayout_measureWithLargestChild, false);          a.recycle();      } @@ -100,6 +96,12 @@ public class IcsLinearLayout extends NineLinearLayout {          if (divider == mDivider) {              return;          } + +        //Fix for issue #379 +        if (divider instanceof ColorDrawable && Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { +            divider = new IcsColorDrawable((ColorDrawable) divider); +        } +          mDivider = divider;          if (divider != null) {              mDividerWidth = divider.getIntrinsicWidth(); @@ -275,136 +277,4 @@ public class IcsLinearLayout extends NineLinearLayout {          }          return false;      } - -    /** -     * When true, all children with a weight will be considered having -     * the minimum size of the largest child. If false, all children are -     * measured normally. -     * -     * @return True to measure children with a weight using the minimum -     *         size of the largest child, false otherwise. -     * -     * @attr ref android.R.styleable#LinearLayout_measureWithLargestChild -     */ -    public boolean isMeasureWithLargestChildEnabled() { -        return mUseLargestChild; -    } - -    /** -     * When set to true, all children with a weight will be considered having -     * the minimum size of the largest child. If false, all children are -     * measured normally. -     * -     * Disabled by default. -     * -     * @param enabled True to measure children with a weight using the -     *        minimum size of the largest child, false otherwise. -     * -     * @attr ref android.R.styleable#LinearLayout_measureWithLargestChild -     */ -    public void setMeasureWithLargestChildEnabled(boolean enabled) { -        mUseLargestChild = enabled; -    } - -    @Override -    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { -        super.onMeasure(widthMeasureSpec, heightMeasureSpec); - -        if (mUseLargestChild) { -            final int orientation = getOrientation(); -            switch (orientation) { -                case HORIZONTAL: -                    useLargestChildHorizontal(); -                    break; - -                case VERTICAL: -                    useLargestChildVertical(); -                    break; -            } -        } -    } - -    private void useLargestChildHorizontal() { -        final int childCount = getChildCount(); - -        // Find largest child width -        int largestChildWidth = 0; -        for (int i = 0; i < childCount; i++) { -            final View child = getChildAt(i); -            largestChildWidth = Math.max(child.getMeasuredWidth(), largestChildWidth); -        } - -        int totalWidth = 0; -        // Re-measure childs -        for (int i = 0; i < childCount; i++) { -            final View child = getChildAt(i); - -            if (child == null || child.getVisibility() == View.GONE) { -                continue; -            } - -            final LinearLayout.LayoutParams lp = -                    (LinearLayout.LayoutParams) child.getLayoutParams(); - -            float childExtra = lp.weight; -            if (childExtra > 0) { -                child.measure( -                        MeasureSpec.makeMeasureSpec(largestChildWidth, -                                MeasureSpec.EXACTLY), -                        MeasureSpec.makeMeasureSpec(child.getMeasuredHeight(), -                                MeasureSpec.EXACTLY)); -                totalWidth += largestChildWidth; - -            } else { -                totalWidth += child.getMeasuredWidth(); -            } - -            totalWidth += lp.leftMargin + lp.rightMargin; -        } - -        totalWidth += getPaddingLeft() + getPaddingRight(); -        setMeasuredDimension(totalWidth, getMeasuredHeight()); -    } - -    private void useLargestChildVertical() { -        final int childCount = getChildCount(); - -        // Find largest child width -        int largestChildHeight = 0; -        for (int i = 0; i < childCount; i++) { -            final View child = getChildAt(i); -            largestChildHeight = Math.max(child.getMeasuredHeight(), largestChildHeight); -        } - -        int totalHeight = 0; -        // Re-measure childs -        for (int i = 0; i < childCount; i++) { -            final View child = getChildAt(i); - -            if (child == null || child.getVisibility() == View.GONE) { -                continue; -            } - -            final LinearLayout.LayoutParams lp = -                    (LinearLayout.LayoutParams) child.getLayoutParams(); - -            float childExtra = lp.weight; -            if (childExtra > 0) { -                child.measure( -                        MeasureSpec.makeMeasureSpec(child.getMeasuredWidth(), -                                MeasureSpec.EXACTLY), -                        MeasureSpec.makeMeasureSpec(largestChildHeight, -                                MeasureSpec.EXACTLY)); -                totalHeight += largestChildHeight; - -            } else { -                totalHeight += child.getMeasuredHeight(); -            } - -            totalHeight += lp.leftMargin + lp.rightMargin; -        } - -        totalHeight += getPaddingLeft() + getPaddingRight(); -        setMeasuredDimension(getMeasuredWidth(), totalHeight); -    }  } diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsListPopupWindow.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsListPopupWindow.java index d13c6cea9..9ed87db2f 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsListPopupWindow.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsListPopupWindow.java @@ -36,7 +36,7 @@ public class IcsListPopupWindow {      private static final int EXPAND_LIST_TIMEOUT = 250;      private Context mContext; -    private PopupWindow mPopup; +    private final PopupWindowCompat mPopup;      private ListAdapter mAdapter;      private DropDownListView mDropDownList; @@ -80,7 +80,7 @@ public class IcsListPopupWindow {      public IcsListPopupWindow(Context context, AttributeSet attrs, int defStyleAttr) {          mContext = context; -        mPopup = new PopupWindow(context, attrs, defStyleAttr); +        mPopup = new PopupWindowCompat(context, attrs, defStyleAttr);          mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);      } @@ -88,9 +88,9 @@ public class IcsListPopupWindow {          mContext = context;          if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {              Context wrapped = new ContextThemeWrapper(context, defStyleRes); -            mPopup = new PopupWindow(wrapped, attrs, defStyleAttr); +            mPopup = new PopupWindowCompat(wrapped, attrs, defStyleAttr);          } else { -            mPopup = new PopupWindow(context, attrs, defStyleAttr, defStyleRes); +            mPopup = new PopupWindowCompat(context, attrs, defStyleAttr, defStyleRes);          }          mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);      } @@ -258,6 +258,23 @@ public class IcsListPopupWindow {          mPopup.setInputMethodMode(mode);      } +    /** +     * Set the selected position of the list. +     * Only valid when {@link #isShowing()} == {@code true}. +     * +     * @param position List position to set as selected. +     */ +    public void setSelection(int position) { +        DropDownListView list = mDropDownList; +        if (isShowing() && list != null) { +            list.mListSelectionHidden = false; +            list.setSelection(position); +            if (list.getChoiceMode() != ListView.CHOICE_MODE_NONE) { +                list.setItemChecked(position, true); +            } +        } +    } +      public void clearListSelection() {          final DropDownListView list = mDropDownList;          if (list != null) { diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsToast.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsToast.java new file mode 100644 index 000000000..042648b24 --- /dev/null +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/IcsToast.java @@ -0,0 +1,60 @@ + +package com.actionbarsherlock.internal.widget; + +import android.content.Context; +import android.util.Log; +import android.view.Gravity; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.widget.TextView; +import android.widget.Toast; + +import com.actionbarsherlock.R; + +public class IcsToast extends Toast { +    public static final int LENGTH_LONG = Toast.LENGTH_LONG; +    public static final int LENGTH_SHORT = Toast.LENGTH_SHORT; +    private static final String TAG = "Toast"; + +    public static Toast makeText(Context context, CharSequence s, int duration) { +        if (VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH) { +            return Toast.makeText(context, s, duration); +        } +        IcsToast toast = new IcsToast(context); +        toast.setDuration(duration); +        TextView view = new TextView(context); +        view.setText(s); +        // Original AOSP using reference on @android:color/bright_foreground_dark +        // bright_foreground_dark - reference on @android:color/background_light +        // background_light - 0xffffffff +        view.setTextColor(0xffffffff); +        view.setGravity(Gravity.CENTER); +        view.setBackgroundResource(R.drawable.abs__toast_frame); +        toast.setView(view); +        return toast; +    } + +    public static Toast makeText(Context context, int resId, int duration) { +        return makeText(context, context.getResources().getString(resId), duration); +    } + +    public IcsToast(Context context) { +        super(context); +    } + +    @Override +    public void setText(CharSequence s) { +        if (VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH) { +            super.setText(s); +            return; +        } +        if (getView() == null) { +            return; +        } +        try { +            ((TextView) getView()).setText(s); +        } catch (ClassCastException e) { +            Log.e(TAG, "This Toast was not created with IcsToast.makeText", e); +        } +    } +} diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/PopupWindowCompat.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/PopupWindowCompat.java new file mode 100644 index 000000000..4c6e3720c --- /dev/null +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/PopupWindowCompat.java @@ -0,0 +1,178 @@ + +package com.actionbarsherlock.internal.widget; + +import java.lang.reflect.Field; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewTreeObserver; +import android.view.ViewTreeObserver.OnScrollChangedListener; +import android.widget.PopupWindow; + +/** + * Works around bugs in the handling of {@link ViewTreeObserver} by + * {@link PopupWindow}. + * <p> + * <code>PopupWindow</code> registers an {@link OnScrollChangedListener} with + * {@link ViewTreeObserver}, but does not keep a reference to the observer + * instance that it has registers on. This is problematic when the anchor view + * used by <code>PopupWindow</code> to access the observer is detached from the + * window, as it will revert from the shared <code>ViewTreeObserver</code> owned + * by the <code>ViewRoot</code> to a floating one, meaning + * <code>PopupWindow</code> cannot unregister it's listener anymore and has + * leaked it into the global observer. + * <p> + * This class works around this issue by + * <ul> + * <li>replacing <code>PopupWindow.mOnScrollChangedListener</code> with a no-op + * listener so that any registration or unregistration performed by + * <code>PopupWindow</code> itself has no effect and causes no leaks. + * <li>registering the real listener only with the shared + * <code>ViewTreeObserver</code> and keeping a reference to it to facilitate + * correct unregistration. The reason for not registering on a floating observer + * (before a view is attached) is that there is no safe way to get a reference + * to the shared observer that the floating one will be merged into. This would + * again cause the listener to leak. + * </ul> + */ +public class PopupWindowCompat extends PopupWindow { + +    private static final Field superListenerField; +    static { +        Field f = null; +        try { +            f = PopupWindow.class.getDeclaredField("mOnScrollChangedListener"); +            f.setAccessible(true); +        } catch (NoSuchFieldException e) { +            /* ignored */ +        } +        superListenerField = f; +    } + +    private static final OnScrollChangedListener NOP = new OnScrollChangedListener() { +        @Override +        public void onScrollChanged() { +            /* do nothing */ +        } +    }; + +    private OnScrollChangedListener mSuperScrollListener; +    private ViewTreeObserver mViewTreeObserver; + +    public PopupWindowCompat() { +        super(); +        init(); +    } + +    public PopupWindowCompat(Context context) { +        super(context); +        init(); +    } + +    public PopupWindowCompat(Context context, AttributeSet attrs) { +        super(context, attrs); +        init(); +    } + +    public PopupWindowCompat(Context context, AttributeSet attrs, int defStyle) { +        super(context, attrs, defStyle); +        init(); +    } + +    // @TargetApi(Build.VERSION_CODES.HONEYCOMB) +    public PopupWindowCompat(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { +        super(context, attrs, defStyleAttr, defStyleRes); +        init(); +    } + +    public PopupWindowCompat(int width, int height) { +        super(width, height); +        init(); +    } + +    public PopupWindowCompat(View contentView) { +        super(contentView); +        init(); +    } + +    public PopupWindowCompat(View contentView, int width, int height, boolean focusable) { +        super(contentView, width, height, focusable); +        init(); +    } + +    public PopupWindowCompat(View contentView, int width, int height) { +        super(contentView, width, height); +        init(); +    } + +    private void init() { +        if (superListenerField != null) { +            try { +                mSuperScrollListener = (OnScrollChangedListener) superListenerField.get(this); +                superListenerField.set(this, NOP); +            } catch (Exception e) { +                mSuperScrollListener = null; +            } +        } +    } + +    private void unregisterListener() { +        // Don't do anything if we haven't managed to patch the super listener +        if (mSuperScrollListener != null && mViewTreeObserver != null) { +            if (mViewTreeObserver.isAlive()) { +                mViewTreeObserver.removeOnScrollChangedListener(mSuperScrollListener); +            } +            mViewTreeObserver = null; +        } +    } + +    private void registerListener(View anchor) { +        // Don't do anything if we haven't managed to patch the super listener. +        // And don't bother attaching the listener if the anchor view isn't +        // attached. This means we'll only have to deal with the real VTO owned +        // by the ViewRoot. +        if (mSuperScrollListener != null) { +            ViewTreeObserver vto = (anchor.getWindowToken() != null) ? anchor.getViewTreeObserver() +                    : null; +            if (vto != mViewTreeObserver) { +                if (mViewTreeObserver != null && mViewTreeObserver.isAlive()) { +                    mViewTreeObserver.removeOnScrollChangedListener(mSuperScrollListener); +                } +                if ((mViewTreeObserver = vto) != null) { +                    vto.addOnScrollChangedListener(mSuperScrollListener); +                } +            } +        } +    } + +    @Override +    public void showAsDropDown(View anchor, int xoff, int yoff) { +        super.showAsDropDown(anchor, xoff, yoff); +        registerListener(anchor); +    } + +    @Override +    public void update(View anchor, int xoff, int yoff, int width, int height) { +        super.update(anchor, xoff, yoff, width, height); +        registerListener(anchor); +    } + +    @Override +    public void update(View anchor, int width, int height) { +        super.update(anchor, width, height); +        registerListener(anchor); +    } + +    @Override +    public void showAtLocation(View parent, int gravity, int x, int y) { +        super.showAtLocation(parent, gravity, x, y); +        unregisterListener(); +    } + +    @Override +    public void dismiss() { +        super.dismiss(); +        unregisterListener(); +    } +} diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ScrollingTabContainerView.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ScrollingTabContainerView.java index 48fb5d8b4..eb178e0de 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ScrollingTabContainerView.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/ScrollingTabContainerView.java @@ -186,7 +186,7 @@ public class ScrollingTabContainerView extends NineHorizontalScrollView      }      private IcsLinearLayout createTabLayout() { -        final IcsLinearLayout tabLayout = (IcsLinearLayout) LayoutInflater.from(getContext()) +        final TabsLinearLayout tabLayout = (TabsLinearLayout) LayoutInflater.from(getContext())                  .inflate(R.layout.abs__action_bar_tab_bar_view, null);          tabLayout.setMeasureWithLargestChildEnabled(true);          tabLayout.setLayoutParams(new LinearLayout.LayoutParams( diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/TabsLinearLayout.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/TabsLinearLayout.java new file mode 100644 index 000000000..03d09b1f6 --- /dev/null +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/widget/TabsLinearLayout.java @@ -0,0 +1,113 @@ +package com.actionbarsherlock.internal.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.view.View; +import android.widget.LinearLayout; + +public class TabsLinearLayout extends IcsLinearLayout { +    private static final int[] R_styleable_LinearLayout = new int[] { +            /* 0 */ android.R.attr.measureWithLargestChild, +    }; +    private static final int LinearLayout_measureWithLargestChild = 0; + +    private boolean mUseLargestChild; + +    public TabsLinearLayout(Context context, AttributeSet attrs) { +        super(context, attrs); + +        TypedArray a = context.obtainStyledAttributes(attrs, /*com.android.internal.R.styleable.*/R_styleable_LinearLayout); +        mUseLargestChild = a.getBoolean(/*com.android.internal.R.styleable.*/LinearLayout_measureWithLargestChild, false); + +        a.recycle(); +    } + +    /** +     * When true, all children with a weight will be considered having +     * the minimum size of the largest child. If false, all children are +     * measured normally. +     * +     * @return True to measure children with a weight using the minimum +     *         size of the largest child, false otherwise. +     * +     * @attr ref android.R.styleable#LinearLayout_measureWithLargestChild +     */ +    public boolean isMeasureWithLargestChildEnabled() { +        return mUseLargestChild; +    } + +    /** +     * When set to true, all children with a weight will be considered having +     * the minimum size of the largest child. If false, all children are +     * measured normally. +     * +     * Disabled by default. +     * +     * @param enabled True to measure children with a weight using the +     *        minimum size of the largest child, false otherwise. +     * +     * @attr ref android.R.styleable#LinearLayout_measureWithLargestChild +     */ +    public void setMeasureWithLargestChildEnabled(boolean enabled) { +        mUseLargestChild = enabled; +    } + +    @Override +    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { +        super.onMeasure(widthMeasureSpec, heightMeasureSpec); + +        final int childCount = getChildCount(); +        if (childCount <= 2) return; + +        final int mode = MeasureSpec.getMode(widthMeasureSpec); +        if (mUseLargestChild && mode == MeasureSpec.UNSPECIFIED) { +            final int orientation = getOrientation(); +            if (orientation == HORIZONTAL) { +                useLargestChildHorizontal(); +            } +        } +    } + +    private void useLargestChildHorizontal() { +        final int childCount = getChildCount(); + +        // Find largest child width +        int largestChildWidth = 0; +        for (int i = 0; i < childCount; i++) { +            final View child = getChildAt(i); +            largestChildWidth = Math.max(child.getMeasuredWidth(), largestChildWidth); +        } + +        int totalWidth = 0; +        // Re-measure childs +        for (int i = 0; i < childCount; i++) { +            final View child = getChildAt(i); + +            if (child == null || child.getVisibility() == View.GONE) { +                continue; +            } + +            final LinearLayout.LayoutParams lp = +                    (LinearLayout.LayoutParams) child.getLayoutParams(); + +            float childExtra = lp.weight; +            if (childExtra > 0) { +                child.measure( +                        MeasureSpec.makeMeasureSpec(largestChildWidth, +                                MeasureSpec.EXACTLY), +                        MeasureSpec.makeMeasureSpec(child.getMeasuredHeight(), +                                MeasureSpec.EXACTLY)); +                totalWidth += largestChildWidth; + +            } else { +                totalWidth += child.getMeasuredWidth(); +            } + +            totalWidth += lp.leftMargin + lp.rightMargin; +        } + +        totalWidth += getPaddingLeft() + getPaddingRight(); +        setMeasuredDimension(totalWidth, getMeasuredHeight()); +    } +} diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/ActivityChooserView.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/ActivityChooserView.java index e19ea9e9e..7eb7330e4 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/ActivityChooserView.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/ActivityChooserView.java @@ -395,7 +395,11 @@ class ActivityChooserView extends ViewGroup implements ActivityChooserModelClien          super.onAttachedToWindow();          ActivityChooserModel dataModel = mAdapter.getDataModel();          if (dataModel != null) { -            dataModel.registerObserver(mModelDataSetOberver); +            try { +                dataModel.registerObserver(mModelDataSetOberver); +            } catch (IllegalStateException e) { +                // Related to #557. +            }          }          mIsAttachedToWindow = true;      } @@ -522,6 +526,9 @@ class ActivityChooserView extends ViewGroup implements ActivityChooserModelClien                          mDefaultActionButtonContentDescription, label);                  mDefaultActivityButton.setContentDescription(contentDescription);              } + +            // Work-around for #415. +            mAdapter.setShowDefaultActivity(false, false);          } else {              mDefaultActivityButton.setVisibility(View.GONE);          } @@ -644,7 +651,8 @@ class ActivityChooserView extends ViewGroup implements ActivityChooserModelClien          private int mMaxActivityCount = MAX_ACTIVITY_COUNT_DEFAULT; -        private boolean mShowDefaultActivity; +        // Work-around for #415. +        private boolean mShowDefaultActivity = true;          private boolean mHighlightDefaultActivity; @@ -661,7 +669,11 @@ class ActivityChooserView extends ViewGroup implements ActivityChooserModelClien              }              mDataModel = dataModel;              if (dataModel != null && isShown()) { -                dataModel.registerObserver(mModelDataSetOberver); +                try { +                    dataModel.registerObserver(mModelDataSetOberver); +                } catch (IllegalStateException e) { +                    // Related to #557. +                }              }              notifyDataSetChanged();          } diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/SearchView.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/SearchView.java index c9e7897d4..fb8319645 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/SearchView.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/SearchView.java @@ -1623,8 +1623,8 @@ public class SearchView extends LinearLayout implements CollapsibleActionView {      private void forceSuggestionQuery() {          try { -            Method before = SearchAutoComplete.class.getMethod("doBeforeTextChanged"); -            Method after = SearchAutoComplete.class.getMethod("doAfterTextChanged"); +            Method before = AutoCompleteTextView.class.getDeclaredMethod("doBeforeTextChanged"); +            Method after = AutoCompleteTextView.class.getDeclaredMethod("doAfterTextChanged");              before.setAccessible(true);              after.setAccessible(true);              before.invoke(mQueryTextView); diff --git a/libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/SuggestionsAdapter.java b/libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/SuggestionsAdapter.java index bd5cbd718..82d4f0c42 100644 --- a/libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/SuggestionsAdapter.java +++ b/libraries/ActionBarSherlock/src/com/actionbarsherlock/widget/SuggestionsAdapter.java @@ -66,6 +66,7 @@ class SuggestionsAdapter extends ResourceCursorAdapter implements OnClickListene      static final int REFINE_ALL = 2;      private SearchManager mSearchManager; +    private SearchableInfo mSearchable;      private SearchView mSearchView;      private Context mProviderContext;      private WeakHashMap<String, Drawable.ConstantState> mOutsideDrawablesCache; @@ -94,12 +95,13 @@ class SuggestionsAdapter extends ResourceCursorAdapter implements OnClickListene      //private static final long DELETE_KEY_POST_DELAY = 500L;      public SuggestionsAdapter(Context context, SearchView searchView, -                SearchableInfo mSearchable, WeakHashMap<String, Drawable.ConstantState> outsideDrawablesCache) { +                              SearchableInfo searchable, WeakHashMap<String, Drawable.ConstantState> outsideDrawablesCache) {          super(context,              R.layout.abs__search_dropdown_item_icons_2line,              null,   // no initial cursor              true);  // auto-requery          mSearchManager = (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE); +        mSearchable = searchable;          mProviderContext = mContext;          mSearchView = searchView; @@ -199,25 +201,48 @@ class SuggestionsAdapter extends ResourceCursorAdapter implements OnClickListene      }      public Cursor getSuggestions(String query, int limit) { +        if (mSearchable == null) { +            return null; +        } + +        String authority = mSearchable.getSuggestAuthority(); +        if (authority == null) { +            return null; +        } +          Uri.Builder uriBuilder = new Uri.Builder()                  .scheme(ContentResolver.SCHEME_CONTENT) +                .authority(authority)                  .query("")  // TODO: Remove, workaround for a bug in Uri.writeToParcel()                  .fragment("");  // TODO: Remove, workaround for a bug in Uri.writeToParcel() +        // if content path provided, insert it now +        final String contentPath = mSearchable.getSuggestPath(); +        if (contentPath != null) { +            uriBuilder.appendEncodedPath(contentPath); +        } +          // append standard suggestion query path          uriBuilder.appendPath(SearchManager.SUGGEST_URI_PATH_QUERY); +        // get the query selection, may be null +        String selection = mSearchable.getSuggestSelection();          // inject query, either as selection args or inline -        uriBuilder.appendPath(query); +        String[] selArgs = null; +        if (selection != null) {    // use selection if provided +            selArgs = new String[] { query }; +        } else {                    // no selection, use REST pattern +            uriBuilder.appendPath(query); +        }          if (limit > 0) { -            uriBuilder.appendQueryParameter(SearchManager.SUGGEST_PARAMETER_LIMIT, String.valueOf(limit)); +            uriBuilder.appendQueryParameter("limit", String.valueOf(limit));          }          Uri uri = uriBuilder.build();          // finally, make the query -        return mContext.getContentResolver().query(uri, null, null, null, null); +        return mContext.getContentResolver().query(uri, null, selection, selArgs, null);      }      public void close() { diff --git a/libraries/ActionBarSherlock/test/com/actionbarsherlock/internal/ManifestParsingTest.java b/libraries/ActionBarSherlock/test/com/actionbarsherlock/internal/ManifestParsingTest.java deleted file mode 100644 index 47475c574..000000000 --- a/libraries/ActionBarSherlock/test/com/actionbarsherlock/internal/ManifestParsingTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.actionbarsherlock.internal; - -import org.junit.Test; - -import static com.actionbarsherlock.internal.ActionBarSherlockCompat.cleanActivityName; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.junit.Assert.assertThat; - -public class ManifestParsingTest { -    @Test -    public void testFullyQualifiedClassName() { -        String expected = "com.other.package.SomeClass"; -        String actual = cleanActivityName("com.jakewharton.test", "com.other.package.SomeClass"); -        assertThat(expected, equalTo(actual)); -    } - -    @Test -    public void testFullyQualifiedClassNameSamePackage() { -        String expected = "com.jakewharton.test.SomeClass"; -        String actual = cleanActivityName("com.jakewharton.test", "com.jakewharton.test.SomeClass"); -        assertThat(expected, equalTo(actual)); -    } - -    @Test -    public void testUnqualifiedClassName() { -        String expected = "com.jakewharton.test.SomeClass"; -        String actual = cleanActivityName("com.jakewharton.test", "SomeClass"); -        assertThat(expected, equalTo(actual)); -    } - -    @Test -    public void testRelativeClassName() { -        String expected = "com.jakewharton.test.ui.SomeClass"; -        String actual = cleanActivityName("com.jakewharton.test", ".ui.SomeClass"); -        assertThat(expected, equalTo(actual)); -    } -}
\ No newline at end of file diff --git a/libraries/ActionBarSherlock/test/com/actionbarsherlock/internal/ResourcesCompatTest.java b/libraries/ActionBarSherlock/test/com/actionbarsherlock/internal/ResourcesCompatTest.java new file mode 100644 index 000000000..f621d3a96 --- /dev/null +++ b/libraries/ActionBarSherlock/test/com/actionbarsherlock/internal/ResourcesCompatTest.java @@ -0,0 +1,23 @@ +package com.actionbarsherlock.internal; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +import static com.actionbarsherlock.internal.ActionBarSherlockCompat.cleanActivityName; +import static org.fest.assertions.api.Assertions.assertThat; + +@RunWith(RobolectricTestRunner.class) +public class ResourcesCompatTest { +    @Test +    public void testCleanActivityName() { +        assertThat(cleanActivityName("com.jakewharton.test", "com.other.package.SomeClass")) // +            .isEqualTo("com.other.package.SomeClass"); +        assertThat(cleanActivityName("com.jakewharton.test", "com.jakewharton.test.SomeClass")) // +            .isEqualTo("com.jakewharton.test.SomeClass"); +        assertThat(cleanActivityName("com.jakewharton.test", "SomeClass")) // +            .isEqualTo("com.jakewharton.test.SomeClass"); +        assertThat(cleanActivityName("com.jakewharton.test", ".ui.SomeClass")) // +            .isEqualTo("com.jakewharton.test.ui.SomeClass"); +    } +}
\ No newline at end of file | 
