Home | History | Annotate | Download | only in wm
      1 /*
      2  * Copyright (C) 2018 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.server.wm;
     18 
     19 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
     20 import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN;
     21 import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
     22 import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
     23 import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
     24 
     25 import android.app.Activity;
     26 import android.app.AlertDialog;
     27 import android.content.Intent;
     28 import android.view.Gravity;
     29 import android.view.Window;
     30 import android.view.WindowManager.LayoutParams;
     31 
     32 import java.util.function.Consumer;
     33 
     34 // TODO: Make this an inner class of {@link DialogFrameTest}.
     35 public class DialogFrameTestActivity extends Activity {
     36 
     37     static final String DIALOG_WINDOW_NAME = "TestDialog";
     38 
     39     // TODO: Passing layout parameters for {@link Dialog} in extra of {@link Intent} instead of
     40     // using test case name.
     41     // Extra key for test case name.
     42     static final String EXTRA_TEST_CASE = "test-case";
     43     // Value constants for {@link #EXTRA_TEST_CASE}.
     44     static final String TEST_EXPLICIT_POSITION_MATCH_PARENT = "ExplicitPositionMatchParent";
     45     static final String TEST_EXPLICIT_POSITION_MATCH_PARENT_NO_LIMITS =
     46             "ExplicitPositionMatchParentNoLimits";
     47     static final String TEST_EXPLICIT_SIZE = "ExplicitSize";
     48     static final String TEST_EXPLICIT_SIZE_BOTTOM_RIGHT_GRAVITY =
     49             "ExplicitSizeBottomRightGravity";
     50     static final String TEST_EXPLICIT_SIZE_TOP_LEFT_GRAVITY = "ExplicitSizeTopLeftGravity";
     51     static final String TEST_MATCH_PARENT = "MatchParent";
     52     static final String TEST_MATCH_PARENT_LAYOUT_IN_OVERSCAN = "MatchParentLayoutInOverscan";
     53     static final String TEST_NO_FOCUS = "NoFocus";
     54     static final String TEST_OVER_SIZED_DIMENSIONS = "OversizedDimensions";
     55     static final String TEST_OVER_SIZED_DIMENSIONS_NO_LIMITS = "OversizedDimensionsNoLimits";
     56     static final String TEST_WITH_MARGINS = "WithMargins";
     57 
     58     private AlertDialog mDialog;
     59 
     60     @Override
     61     protected void onStop() {
     62         super.onStop();
     63         mDialog.dismiss();
     64     }
     65 
     66     @Override
     67     protected void onResume() {
     68         super.onResume();
     69         setupTest(getIntent());
     70     }
     71 
     72     private void setupTest(Intent intent) {
     73         final String testCase = intent.getStringExtra(EXTRA_TEST_CASE);
     74         switch (testCase) {
     75             case TEST_MATCH_PARENT:
     76                 testMatchParent();
     77                 break;
     78             case TEST_MATCH_PARENT_LAYOUT_IN_OVERSCAN:
     79                 testMatchParentLayoutInOverscan();
     80                 break;
     81             case TEST_EXPLICIT_SIZE:
     82                 testExplicitSize();
     83                 break;
     84             case TEST_EXPLICIT_SIZE_TOP_LEFT_GRAVITY:
     85                 testExplicitSizeTopLeftGravity();
     86                 break;
     87             case TEST_EXPLICIT_SIZE_BOTTOM_RIGHT_GRAVITY:
     88                 testExplicitSizeBottomRightGravity();
     89                 break;
     90             case TEST_OVER_SIZED_DIMENSIONS:
     91                 testOversizedDimensions();
     92                 break;
     93             case TEST_OVER_SIZED_DIMENSIONS_NO_LIMITS:
     94                 testOversizedDimensionsNoLimits();
     95                 break;
     96             case TEST_EXPLICIT_POSITION_MATCH_PARENT:
     97                 testExplicitPositionMatchParent();
     98                 break;
     99             case TEST_EXPLICIT_POSITION_MATCH_PARENT_NO_LIMITS:
    100                 testExplicitPositionMatchParentNoLimits();
    101                 break;
    102             case TEST_NO_FOCUS:
    103                 testNoFocus();
    104                 break;
    105             case TEST_WITH_MARGINS:
    106                 testWithMargins();
    107                 break;
    108             default:
    109                 break;
    110         }
    111     }
    112 
    113     private void doLayoutParamTest(Consumer<LayoutParams> setUp) {
    114         mDialog = new AlertDialog.Builder(this).create();
    115 
    116         mDialog.setMessage("Testing is fun!");
    117         mDialog.setTitle(DIALOG_WINDOW_NAME);
    118         mDialog.create();
    119 
    120         Window w = mDialog.getWindow();
    121         final LayoutParams params = w.getAttributes();
    122         setUp.accept(params);
    123         w.setAttributes(params);
    124 
    125         mDialog.show();
    126     }
    127 
    128     private void testMatchParent() {
    129         doLayoutParamTest(params -> {
    130             params.width = MATCH_PARENT;
    131             params.height = MATCH_PARENT;
    132         });
    133     }
    134 
    135     private void testMatchParentLayoutInOverscan() {
    136         doLayoutParamTest(params -> {
    137             params.width = MATCH_PARENT;
    138             params.height = MATCH_PARENT;
    139             params.flags |= FLAG_LAYOUT_IN_SCREEN;
    140             params.flags |= FLAG_LAYOUT_IN_OVERSCAN;
    141         });
    142     }
    143 
    144     private void testExplicitSize() {
    145         doLayoutParamTest(params -> {
    146             params.width = 200;
    147             params.height = 200;
    148         });
    149     }
    150 
    151     private void testExplicitSizeTopLeftGravity() {
    152         doLayoutParamTest(params -> {
    153             params.width = 200;
    154             params.height = 200;
    155             params.gravity = Gravity.TOP | Gravity.LEFT;
    156         });
    157     }
    158 
    159     private void testExplicitSizeBottomRightGravity() {
    160         doLayoutParamTest(params -> {
    161             params.width = 200;
    162             params.height = 200;
    163             params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
    164         });
    165     }
    166 
    167     private void testOversizedDimensions() {
    168         doLayoutParamTest(params -> {
    169             params.width = 100000;
    170             params.height = 100000;
    171         });
    172     }
    173 
    174     private void testOversizedDimensionsNoLimits() {
    175         doLayoutParamTest(params -> {
    176             params.width = 5000;
    177             params.height = 5000;
    178             params.flags |= FLAG_LAYOUT_NO_LIMITS;
    179             params.gravity = Gravity.LEFT | Gravity.TOP;
    180         });
    181     }
    182 
    183     private void testExplicitPositionMatchParent() {
    184         doLayoutParamTest(params -> {
    185             params.width = MATCH_PARENT;
    186             params.height = MATCH_PARENT;
    187             params.x = 100;
    188             params.y = 100;
    189         });
    190     }
    191 
    192     private void testExplicitPositionMatchParentNoLimits() {
    193         doLayoutParamTest(params -> {
    194             params.width = MATCH_PARENT;
    195             params.height = MATCH_PARENT;
    196             params.gravity = Gravity.LEFT | Gravity.TOP;
    197             params.flags |= FLAG_LAYOUT_NO_LIMITS;
    198             params.x = 100;
    199             params.y = 100;
    200         });
    201     }
    202 
    203     private void testNoFocus() {
    204         doLayoutParamTest(params -> params.flags |= FLAG_NOT_FOCUSABLE);
    205     }
    206 
    207     private void testWithMargins() {
    208         doLayoutParamTest(params -> {
    209             params.gravity = Gravity.LEFT | Gravity.TOP;
    210             params.horizontalMargin = .25f;
    211             params.verticalMargin = .35f;
    212             params.width = 200;
    213             params.height = 200;
    214             params.x = 0;
    215             params.y = 0;
    216         });
    217     }
    218 }
    219