1 /*
2  * Copyright (C) 2011 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 com.android.inputmethod.latin.utils;
18 
19 import android.view.View;
20 import android.view.ViewGroup;
21 import android.view.ViewGroup.MarginLayoutParams;
22 import android.view.Window;
23 import android.view.WindowManager;
24 import android.widget.FrameLayout;
25 import android.widget.LinearLayout;
26 import android.widget.RelativeLayout;
27 
28 public final class ViewLayoutUtils {
ViewLayoutUtils()29     private ViewLayoutUtils() {
30         // This utility class is not publicly instantiable.
31     }
32 
newLayoutParam(final ViewGroup placer, final int width, final int height)33     public static MarginLayoutParams newLayoutParam(final ViewGroup placer, final int width,
34             final int height) {
35         if (placer instanceof FrameLayout) {
36             return new FrameLayout.LayoutParams(width, height);
37         } else if (placer instanceof RelativeLayout) {
38             return new RelativeLayout.LayoutParams(width, height);
39         } else if (placer == null) {
40             throw new NullPointerException("placer is null");
41         } else {
42             throw new IllegalArgumentException("placer is neither FrameLayout nor RelativeLayout: "
43                     + placer.getClass().getName());
44         }
45     }
46 
placeViewAt(final View view, final int x, final int y, final int w, final int h)47     public static void placeViewAt(final View view, final int x, final int y, final int w,
48             final int h) {
49         final ViewGroup.LayoutParams lp = view.getLayoutParams();
50         if (lp instanceof MarginLayoutParams) {
51             final MarginLayoutParams marginLayoutParams = (MarginLayoutParams)lp;
52             marginLayoutParams.width = w;
53             marginLayoutParams.height = h;
54             marginLayoutParams.setMargins(x, y, 0, 0);
55         }
56     }
57 
updateLayoutHeightOf(final Window window, final int layoutHeight)58     public static void updateLayoutHeightOf(final Window window, final int layoutHeight) {
59         final WindowManager.LayoutParams params = window.getAttributes();
60         if (params != null && params.height != layoutHeight) {
61             params.height = layoutHeight;
62             window.setAttributes(params);
63         }
64     }
65 
updateLayoutHeightOf(final View view, final int layoutHeight)66     public static void updateLayoutHeightOf(final View view, final int layoutHeight) {
67         final ViewGroup.LayoutParams params = view.getLayoutParams();
68         if (params != null && params.height != layoutHeight) {
69             params.height = layoutHeight;
70             view.setLayoutParams(params);
71         }
72     }
73 
updateLayoutGravityOf(final View view, final int layoutGravity)74     public static void updateLayoutGravityOf(final View view, final int layoutGravity) {
75         final ViewGroup.LayoutParams lp = view.getLayoutParams();
76         if (lp instanceof LinearLayout.LayoutParams) {
77             final LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)lp;
78             if (params.gravity != layoutGravity) {
79                 params.gravity = layoutGravity;
80                 view.setLayoutParams(params);
81             }
82         } else if (lp instanceof FrameLayout.LayoutParams) {
83             final FrameLayout.LayoutParams params = (FrameLayout.LayoutParams)lp;
84             if (params.gravity != layoutGravity) {
85                 params.gravity = layoutGravity;
86                 view.setLayoutParams(params);
87             }
88         } else {
89             throw new IllegalArgumentException("Layout parameter doesn't have gravity: "
90                     + lp.getClass().getName());
91         }
92     }
93 }
94