Home | History | Annotate | Download | only in helpers
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.system.helpers;
     18 
     19 import android.app.Instrumentation;
     20 import android.content.ContentResolver;
     21 import android.graphics.Point;
     22 import android.provider.Settings;
     23 import android.support.test.uiautomator.By;
     24 import android.support.test.uiautomator.UiDevice;
     25 import android.support.test.uiautomator.UiObject2;
     26 import android.support.test.uiautomator.Until;
     27 
     28 import org.junit.Assert;
     29 
     30 /**
     31  * Implement common helper methods for Quick settings.
     32  */
     33 public class QuickSettingsHelper {
     34 
     35     private UiDevice mDevice = null;
     36     private ContentResolver mResolver;
     37     private Instrumentation mInstrumentation;
     38     private static final int LONG_TIMEOUT = 2000;
     39     private static final int SHORT_TIMEOUT = 500;
     40 
     41     public QuickSettingsHelper(UiDevice device, Instrumentation inst, ContentResolver resolver) {
     42         this.mDevice = device;
     43         mInstrumentation = inst;
     44         mResolver = resolver;
     45     }
     46 
     47     public enum QuickSettingDefaultTiles {
     48         WIFI("Wi-Fi"), SIM("Mobile data"), DND("Do not disturb"), FLASHLIGHT("Flashlight"), SCREEN(
     49                 "Auto-rotate screen"), BLUETOOTH("Bluetooth"), AIRPLANE("Airplane mode"),
     50                 BRIGHTNESS("Display brightness");
     51 
     52         private final String name;
     53 
     54         private QuickSettingDefaultTiles(String name) {
     55             this.name = name;
     56         }
     57 
     58         public String getName() {
     59             return this.name;
     60         }
     61     };
     62 
     63     public enum QuickSettingEditMenuTiles {
     64         LOCATION("Location"), HOTSPOT("Hotspot"), INVERTCOLORS("Invert colors"),
     65                 DATASAVER("Data Saver"), CAST("Cast"), NEARBY("Nearby");
     66 
     67         private final String name;
     68 
     69         private QuickSettingEditMenuTiles(String name) {
     70             this.name = name;
     71         }
     72 
     73         public String getName() {
     74             return this.name;
     75         }
     76     };
     77 
     78     public void addQuickSettingTileFromEditMenu(String quickSettingTile,
     79             String quickSettingTileToReplace, String quickSettingTileToCheckForInCSV)
     80             throws Exception {
     81         // Draw down quick settings
     82         launchQuickSetting();
     83         // Press Edit button
     84         UiObject2 quickSettingEdit = mDevice.wait(Until.findObject
     85                 (By.descContains("Edit")), LONG_TIMEOUT);
     86         quickSettingEdit.click();
     87         // Scroll down to bottom to see all QS options on Edit
     88         swipeDown();
     89         // Drag and drop QS item onto existing QS tile to replace it
     90         // This is because we need specific coordinates on which to
     91         // drop the quick setting tile.
     92         UiObject2 quickSettingTileObject = mDevice.wait(Until.findObject
     93                 (By.descContains(quickSettingTile)), LONG_TIMEOUT);
     94         Point destination = mDevice.wait(Until.findObject
     95                 (By.descContains(quickSettingTileToReplace)), LONG_TIMEOUT)
     96                 .getVisibleCenter();
     97         Assert.assertNotNull(quickSettingTile + " in Edit menu can't be found",
     98                 quickSettingTileObject);
     99         Assert.assertNotNull(quickSettingTileToReplace + " in QS menu can't be found",
    100                 destination);
    101         // Long press the icon, then drag it to the destination slowly.
    102         // Without the long press, it ends up scrolling down quick settings.
    103         quickSettingTileObject.click(2000);
    104         quickSettingTileObject.drag(destination, 1000);
    105         // Hit the back button in the QS menu to go back to quick settings.
    106         mDevice.wait(Until.findObject(By.descContains("Navigate up")), LONG_TIMEOUT);
    107         // Retrieve the quick settings CSV string and verify that the newly
    108         // added item is present.
    109         String quickSettingsList = Settings.Secure.getString
    110                 (mInstrumentation.getContext().getContentResolver(),
    111                 "sysui_qs_tiles");
    112         Assert.assertTrue(quickSettingTile + " not present in qs tiles after addition.",
    113                 quickSettingsList.contains(quickSettingTileToCheckForInCSV));
    114     }
    115 
    116     public void setQuickSettingsDefaultTiles() throws Exception {
    117         modifyListOfQuickSettingsTiles
    118                 ("wifi,cell,battery,dnd,flashlight,rotation,bt,airplane,location");
    119     }
    120 
    121     public void modifyListOfQuickSettingsTiles(String commaSeparatedList) throws Exception {
    122         Settings.Secure.putString(mInstrumentation.getContext().getContentResolver(),
    123                 "sysui_qs_tiles", commaSeparatedList);
    124         Thread.sleep(LONG_TIMEOUT);
    125     }
    126 
    127     public void launchQuickSetting() throws Exception {
    128         mDevice.pressHome();
    129         swipeDown();
    130         Thread.sleep(LONG_TIMEOUT);
    131         swipeDown();
    132     }
    133 
    134     public void swipeUp() throws Exception {
    135         mDevice.swipe(mDevice.getDisplayWidth() / 2, mDevice.getDisplayHeight(),
    136                 mDevice.getDisplayWidth() / 2, 0, 30);
    137         Thread.sleep(SHORT_TIMEOUT);
    138     }
    139 
    140     public void swipeDown() throws Exception {
    141         mDevice.swipe(mDevice.getDisplayWidth() / 2, 0, mDevice.getDisplayWidth() / 2,
    142                 mDevice.getDisplayHeight() / 2 + 50, 20);
    143         Thread.sleep(SHORT_TIMEOUT);
    144     }
    145 
    146     public void swipeLeft() {
    147         mDevice.swipe(mDevice.getDisplayWidth() / 2, mDevice.getDisplayHeight() / 2, 0,
    148                 mDevice.getDisplayHeight() / 2, 5);
    149     }
    150 }
    151