build/mobile/robocop/FennecNativeElement.java

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 package org.mozilla.gecko;
     7 import android.app.Activity;
     8 import android.view.View;
     9 import android.view.ViewGroup;
    10 import android.widget.EditText;
    11 import android.widget.TextSwitcher;
    12 import android.widget.TextView;
    14 public class FennecNativeElement implements Element {
    15     private final Activity mActivity;
    16     private Integer mId;
    18     public FennecNativeElement(Integer id, Activity activity) {
    19         mId = id;
    20         mActivity = activity;
    21     }
    23     public Integer getId() {
    24         return mId;
    25     }
    27     private boolean mClickSuccess;
    29     public boolean click() {
    30         mClickSuccess = false;
    31         RobocopUtils.runOnUiThreadSync(mActivity,
    32             new Runnable() {
    33                 public void run() {
    34                     View view = (View)mActivity.findViewById(mId);
    35                     if (view != null) {
    36                         if (view.performClick()) {
    37                             mClickSuccess = true;
    38                         } else {
    39                             FennecNativeDriver.log(FennecNativeDriver.LogLevel.WARN,
    40                                 "Robocop called click on an element with no listener");
    41                         }
    42                     } else {
    43                         FennecNativeDriver.log(FennecNativeDriver.LogLevel.ERROR,
    44                             "click: unable to find view "+mId);
    45                     }
    46                 }
    47             });
    48         return mClickSuccess;
    49     }
    51     private Object mText;
    53     public String getText() {
    54         mText = null;
    55         RobocopUtils.runOnUiThreadSync(mActivity,
    56             new Runnable() {
    57                 public void run() {
    58                     View v = mActivity.findViewById(mId);
    59                     if (v instanceof EditText) {
    60                         EditText et = (EditText)v;
    61                         mText = et.getEditableText();
    62                     } else if (v instanceof TextSwitcher) {
    63                         TextSwitcher ts = (TextSwitcher)v;
    64                         ts.getNextView();
    65                         mText = ((TextView)ts.getCurrentView()).getText();
    66                     } else if (v instanceof ViewGroup) {
    67                         ViewGroup vg = (ViewGroup)v;
    68                         for (int i = 0; i < vg.getChildCount(); i++) {
    69                             if (vg.getChildAt(i) instanceof TextView) {
    70                                 mText = ((TextView)vg.getChildAt(i)).getText();
    71                             }
    72                         }
    73                     } else if (v instanceof TextView) {
    74                         mText = ((TextView)v).getText(); 
    75                     } else if (v == null) {
    76                         FennecNativeDriver.log(FennecNativeDriver.LogLevel.ERROR,
    77                             "getText: unable to find view "+mId);
    78                     } else {
    79                         FennecNativeDriver.log(FennecNativeDriver.LogLevel.ERROR,
    80                             "getText: unhandled type for view "+mId);
    81                     }
    82                 } // end of run() method definition
    83             } // end of anonymous Runnable object instantiation
    84         );
    85         if (mText == null) {
    86             FennecNativeDriver.log(FennecNativeDriver.LogLevel.WARN,
    87                 "getText: Text is null for view "+mId);
    88             return null;
    89         }
    90         return mText.toString();
    91     }
    93     private boolean mDisplayed;
    95     public boolean isDisplayed() {
    96         mDisplayed = false;
    97         RobocopUtils.runOnUiThreadSync(mActivity,
    98             new Runnable() {
    99                 public void run() {
   100                     View view = (View)mActivity.findViewById(mId);
   101                     if (view != null) {
   102                         mDisplayed = true;
   103                     }
   104                 }
   105             });
   106         return mDisplayed;
   107     }
   108 }

mercurial