Fix AS Inspection warnings
Organize imports

Change-Id: I59e545c0020a3d488917c54107e114604a749699
diff --git a/build.gradle b/build.gradle
index 5eaae4b..cbf12f1 100644
--- a/build.gradle
+++ b/build.gradle
@@ -33,12 +33,12 @@
 }
 
 android {
-    compileSdkVersion 21
+    compileSdkVersion 23
     buildToolsVersion '21.1.2'
 
     defaultConfig {
         minSdkVersion 8
-        targetSdkVersion 21
+        targetSdkVersion 23
         versionCode 1
         versionName version
     }
diff --git a/droiddriver-android_support_test/build.gradle b/droiddriver-android_support_test/build.gradle
index b7a4d6d..9d71de2 100644
--- a/droiddriver-android_support_test/build.gradle
+++ b/droiddriver-android_support_test/build.gradle
@@ -3,7 +3,6 @@
         jcenter()
     }
     dependencies {
-        // this requires Gradle 2
         classpath 'com.android.tools.build:gradle:1.3.0'
         classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.0'
     }
@@ -34,16 +33,16 @@
 }
 
 tasks.withType(JavaCompile) {
-    options.compilerArgs << '-Xlint:deprecation'
+    options.compilerArgs << '-Xlint:deprecation' << '-Xlint:unchecked'
 }
 
 android {
-    compileSdkVersion 21
+    compileSdkVersion 23
     buildToolsVersion '21.1.2'
 
     defaultConfig {
         minSdkVersion 8
-        targetSdkVersion 21
+        targetSdkVersion 23
         versionCode 1
     }
 
diff --git a/manualtest/build.gradle b/manualtest/build.gradle
index e6ce4e1..5be41b8 100644
--- a/manualtest/build.gradle
+++ b/manualtest/build.gradle
@@ -11,11 +11,11 @@
 apply plugin: 'com.android.application'
 
 android {
-    compileSdkVersion 21
+    compileSdkVersion 23
     buildToolsVersion '21.1.2'
     defaultConfig {
         minSdkVersion 8
-        targetSdkVersion 21
+        targetSdkVersion 23
         testInstrumentationRunner 'io.appium.droiddriver.runner.TestRunner'
     }
     sourceSets {
diff --git a/src/io/appium/droiddriver/base/BaseDroidDriver.java b/src/io/appium/droiddriver/base/BaseDroidDriver.java
index 827bce6..d6114c6 100644
--- a/src/io/appium/droiddriver/base/BaseDroidDriver.java
+++ b/src/io/appium/droiddriver/base/BaseDroidDriver.java
@@ -17,6 +17,7 @@
 package io.appium.droiddriver.base;
 
 import android.util.Log;
+
 import io.appium.droiddriver.UiElement;
 import io.appium.droiddriver.finders.ByXPath;
 import io.appium.droiddriver.finders.Finder;
diff --git a/src/io/appium/droiddriver/duo/DuoDriver.java b/src/io/appium/droiddriver/duo/DuoDriver.java
index d784087..0ad84bf 100644
--- a/src/io/appium/droiddriver/duo/DuoDriver.java
+++ b/src/io/appium/droiddriver/duo/DuoDriver.java
@@ -16,15 +16,16 @@
 
 package io.appium.droiddriver.duo;
 
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.app.Instrumentation;
+
 import io.appium.droiddriver.base.AbstractDroidDriver;
 import io.appium.droiddriver.base.CompositeDroidDriver;
 import io.appium.droiddriver.instrumentation.InstrumentationDriver;
 import io.appium.droiddriver.uiautomation.UiAutomationDriver;
 import io.appium.droiddriver.util.ActivityUtils;
 import io.appium.droiddriver.util.InstrumentationUtils;
-import android.annotation.TargetApi;
-import android.app.Activity;
-import android.app.Instrumentation;
 
 /**
  * Implementation of DroidDriver that attempts to use the best driver for the current activity.
diff --git a/src/io/appium/droiddriver/finders/Attribute.java b/src/io/appium/droiddriver/finders/Attribute.java
index 9dda497..c2aa83a 100644
--- a/src/io/appium/droiddriver/finders/Attribute.java
+++ b/src/io/appium/droiddriver/finders/Attribute.java
@@ -38,7 +38,7 @@
 
   private final String name;
 
-  private Attribute(String name) {
+  Attribute(String name) {
     this.name = name;
   }
 
diff --git a/src/io/appium/droiddriver/finders/By.java b/src/io/appium/droiddriver/finders/By.java
index 0b6a57f..9a38622 100644
--- a/src/io/appium/droiddriver/finders/By.java
+++ b/src/io/appium/droiddriver/finders/By.java
@@ -16,6 +16,8 @@
 
 package io.appium.droiddriver.finders;
 
+import static io.appium.droiddriver.util.Preconditions.checkNotNull;
+
 import android.content.Context;
 
 import java.util.ArrayList;
@@ -25,8 +27,6 @@
 import io.appium.droiddriver.exceptions.ElementNotFoundException;
 import io.appium.droiddriver.util.InstrumentationUtils;
 
-import static io.appium.droiddriver.util.Preconditions.checkNotNull;
-
 /**
  * Convenience methods to create commonly used finders.
  */
diff --git a/src/io/appium/droiddriver/finders/Predicates.java b/src/io/appium/droiddriver/finders/Predicates.java
index f32b365..0d2d9df 100644
--- a/src/io/appium/droiddriver/finders/Predicates.java
+++ b/src/io/appium/droiddriver/finders/Predicates.java
@@ -124,6 +124,7 @@
    * {@code true}. The components are evaluated in order, and evaluation will be "short-circuited"
    * as soon as a false predicate is found.
    */
+  @SuppressWarnings("RedundantTypeArguments") // Some compilers cannot infer <T>
   @SafeVarargs
   public static <T> Predicate<T> allOf(final Predicate<? super T>... components) {
     return Predicates.<T>allOf(Arrays.asList(components));
@@ -158,6 +159,7 @@
    * {@code true}. The components are evaluated in order, and evaluation will be "short-circuited"
    * as soon as a true predicate is found.
    */
+  @SuppressWarnings("RedundantTypeArguments") // Some compilers cannot infer <T>
   @SafeVarargs
   public static <T> Predicate<T> anyOf(final Predicate<? super T>... components) {
     return Predicates.<T>anyOf(Arrays.asList(components));
diff --git a/src/io/appium/droiddriver/helpers/DroidDrivers.java b/src/io/appium/droiddriver/helpers/DroidDrivers.java
index f48a777..e55d595 100644
--- a/src/io/appium/droiddriver/helpers/DroidDrivers.java
+++ b/src/io/appium/droiddriver/helpers/DroidDrivers.java
@@ -19,6 +19,7 @@
 import android.annotation.TargetApi;
 import android.app.Instrumentation;
 import android.os.Build;
+
 import io.appium.droiddriver.DroidDriver;
 import io.appium.droiddriver.duo.DuoDriver;
 import io.appium.droiddriver.exceptions.DroidDriverException;
diff --git a/src/io/appium/droiddriver/helpers/SingleRun.java b/src/io/appium/droiddriver/helpers/SingleRun.java
index 5ffd21e..714c777 100644
--- a/src/io/appium/droiddriver/helpers/SingleRun.java
+++ b/src/io/appium/droiddriver/helpers/SingleRun.java
@@ -24,7 +24,7 @@
  * a class effect.
  */
 public abstract class SingleRun {
-  private AtomicBoolean hasRun = new AtomicBoolean();
+  private final AtomicBoolean hasRun = new AtomicBoolean();
 
   /**
    * Calls {@link #run()} if it is the first time this method is called upon this instance.
diff --git a/src/io/appium/droiddriver/instrumentation/ViewElement.java b/src/io/appium/droiddriver/instrumentation/ViewElement.java
index e706362..ab87817 100644
--- a/src/io/appium/droiddriver/instrumentation/ViewElement.java
+++ b/src/io/appium/droiddriver/instrumentation/ViewElement.java
@@ -16,6 +16,8 @@
 
 package io.appium.droiddriver.instrumentation;
 
+import static io.appium.droiddriver.util.Strings.charSequenceToString;
+
 import android.content.res.Resources;
 import android.graphics.Rect;
 import android.view.View;
@@ -40,8 +42,6 @@
 import io.appium.droiddriver.util.InstrumentationUtils;
 import io.appium.droiddriver.util.Preconditions;
 
-import static io.appium.droiddriver.util.Strings.charSequenceToString;
-
 /**
  * A UiElement that is backed by a View.
  */
diff --git a/src/io/appium/droiddriver/runner/MinSdkVersion.java b/src/io/appium/droiddriver/runner/MinSdkVersion.java
index c1ea2e9..a05b3fc 100644
--- a/src/io/appium/droiddriver/runner/MinSdkVersion.java
+++ b/src/io/appium/droiddriver/runner/MinSdkVersion.java
@@ -16,14 +16,14 @@
 
 package io.appium.droiddriver.runner;
 
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
 import java.lang.annotation.Inherited;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.TYPE;
-
 /**
  * This annotation indicates that its target needs a minimum SDK version
  * specified as its value.
diff --git a/src/io/appium/droiddriver/runner/UseUiAutomation.java b/src/io/appium/droiddriver/runner/UseUiAutomation.java
index 316ac8f..66ef880 100644
--- a/src/io/appium/droiddriver/runner/UseUiAutomation.java
+++ b/src/io/appium/droiddriver/runner/UseUiAutomation.java
@@ -16,14 +16,14 @@
 
 package io.appium.droiddriver.runner;
 
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
 import java.lang.annotation.Inherited;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.TYPE;
-
 /**
  * This annotation indicates that its target needs
  * {@link android.app.UiAutomation}. It is effectively equivalent to
diff --git a/src/io/appium/droiddriver/scroll/DynamicSentinelStrategy.java b/src/io/appium/droiddriver/scroll/DynamicSentinelStrategy.java
index 051cfa7..b42b60d 100644
--- a/src/io/appium/droiddriver/scroll/DynamicSentinelStrategy.java
+++ b/src/io/appium/droiddriver/scroll/DynamicSentinelStrategy.java
@@ -39,7 +39,7 @@
   /**
    * Interface for determining whether sentinel is updated.
    */
-  public static interface IsUpdatedStrategy {
+  public interface IsUpdatedStrategy {
     /**
      * Returns whether {@code newSentinel} is updated from {@code oldSentinel}.
      */
diff --git a/src/io/appium/droiddriver/scroll/StepBasedScroller.java b/src/io/appium/droiddriver/scroll/StepBasedScroller.java
index 6dbc79e..11c42f4 100644
--- a/src/io/appium/droiddriver/scroll/StepBasedScroller.java
+++ b/src/io/appium/droiddriver/scroll/StepBasedScroller.java
@@ -15,6 +15,8 @@
  */
 package io.appium.droiddriver.scroll;
 
+import static io.appium.droiddriver.scroll.Direction.LogicalDirection.BACKWARD;
+
 import android.util.Log;
 
 import io.appium.droiddriver.DroidDriver;
@@ -29,8 +31,6 @@
 import io.appium.droiddriver.scroll.Direction.PhysicalDirection;
 import io.appium.droiddriver.util.Logs;
 
-import static io.appium.droiddriver.scroll.Direction.LogicalDirection.BACKWARD;
-
 /**
  * A {@link Scroller} that looks for the desired item in the currently shown
  * content of the scrollable container, otherwise scrolls the container one step
diff --git a/src/io/appium/droiddriver/uiautomation/UiAutomationElement.java b/src/io/appium/droiddriver/uiautomation/UiAutomationElement.java
index c011749..5b99131 100644
--- a/src/io/appium/droiddriver/uiautomation/UiAutomationElement.java
+++ b/src/io/appium/droiddriver/uiautomation/UiAutomationElement.java
@@ -16,6 +16,8 @@
 
 package io.appium.droiddriver.uiautomation;
 
+import static io.appium.droiddriver.util.Strings.charSequenceToString;
+
 import android.annotation.TargetApi;
 import android.app.UiAutomation;
 import android.app.UiAutomation.AccessibilityEventFilter;
@@ -37,8 +39,6 @@
 import io.appium.droiddriver.uiautomation.UiAutomationContext.UiAutomationCallable;
 import io.appium.droiddriver.util.Preconditions;
 
-import static io.appium.droiddriver.util.Strings.charSequenceToString;
-
 /**
  * A UiElement that gets attributes via the Accessibility API.
  */
@@ -96,9 +96,9 @@
     put(attribs, Attribute.BOUNDS, getBounds(node));
     attributes = Collections.unmodifiableMap(attribs);
 
-    // Order matters as getVisibleBounds depends on visible
+    // Order matters as findVisibleBounds depends on visible
     visible = node.isVisibleToUser();
-    visibleBounds = getVisibleBounds(node);
+    visibleBounds = findVisibleBounds();
     List<UiAutomationElement> mutableChildren = buildChildren(node);
     this.children = mutableChildren == null ? null : Collections.unmodifiableList(mutableChildren);
   }
@@ -132,21 +132,19 @@
     return rect;
   }
 
-  private Rect getVisibleBounds(AccessibilityNodeInfo node) {
+  private Rect findVisibleBounds() {
     if (!visible) {
       return new Rect();
     }
-    Rect visibleBounds = getBounds();
+    Rect foundBounds = getBounds();
     UiAutomationElement parent = getParent();
-    Rect parentBounds;
     while (parent != null) {
-      parentBounds = parent.getBounds();
-      if (!visibleBounds.intersect(parentBounds)) {
+      if (!foundBounds.intersect(parent.getBounds())) {
         return new Rect();
       }
       parent = parent.getParent();
     }
-    return visibleBounds;
+    return foundBounds;
   }
 
   @Override
diff --git a/src/io/appium/droiddriver/validators/DefaultAccessibilityValidator.java b/src/io/appium/droiddriver/validators/DefaultAccessibilityValidator.java
index 1ce3649..b78d0a5 100644
--- a/src/io/appium/droiddriver/validators/DefaultAccessibilityValidator.java
+++ b/src/io/appium/droiddriver/validators/DefaultAccessibilityValidator.java
@@ -41,14 +41,8 @@
 
   // Logic from TalkBack
   private static boolean isAccessibilityFocusable(UiElement element) {
-    if (isActionableForAccessibility(element)) {
-      return true;
-    }
-
-    if (isTopLevelScrollItem(element) && (isSpeakingNode(element))) {
-      return true;
-    }
-    return false;
+    return isActionableForAccessibility(element)
+        || (isTopLevelScrollItem(element) && isSpeakingNode(element));
   }
 
   private static boolean isTopLevelScrollItem(UiElement element) {