Added Android code
[wl-app.git] / Android / folioreader / src / main / java / com / folioreader / model / quickaction / PopupWindows.java
1 package com.folioreader.model.quickaction;\r
2 \r
3 import android.content.Context;\r
4 import android.graphics.drawable.BitmapDrawable;\r
5 import android.graphics.drawable.Drawable;\r
6 import android.view.LayoutInflater;\r
7 import android.view.MotionEvent;\r
8 import android.view.View;\r
9 import android.view.View.OnTouchListener;\r
10 import android.view.WindowManager;\r
11 import android.widget.PopupWindow;\r
12 \r
13 /**\r
14  * Custom popup window.\r
15  *\r
16  * @author Lorensius W. L. T <lorenz@londatiga.net>\r
17  */\r
18 public class PopupWindows {\r
19     protected Context mContext;\r
20     protected PopupWindow mWindow;\r
21     protected View mRootView;\r
22     protected Drawable mBackground = null;\r
23     protected WindowManager mWindowManager;\r
24 \r
25     /**\r
26      * Constructor.\r
27      *\r
28      * @param context Context\r
29      */\r
30     public PopupWindows(Context context) {\r
31         mContext = context;\r
32         mWindow = new PopupWindow(context);\r
33 \r
34         mWindow.setTouchInterceptor(new OnTouchListener() {\r
35             @Override\r
36             public boolean onTouch(View v, MotionEvent event) {\r
37                 if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {\r
38                     mWindow.dismiss();\r
39 \r
40                     return true;\r
41                 }\r
42 \r
43                 return false;\r
44             }\r
45         });\r
46 \r
47         mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);\r
48     }\r
49 \r
50     /**\r
51      * On dismiss\r
52      */\r
53     protected void onDismiss() {\r
54     }\r
55 \r
56     /**\r
57      * On show\r
58      */\r
59     protected void onShow() {\r
60     }\r
61 \r
62     /**\r
63      * On pre show\r
64      */\r
65     protected void preShow() {\r
66         if (mRootView == null)\r
67             throw new IllegalStateException("setContentView was not called with a view to display");\r
68 \r
69         onShow();\r
70 \r
71         if (mBackground == null) {\r
72             mWindow.setBackgroundDrawable(new BitmapDrawable());\r
73         } else {\r
74             mWindow.setBackgroundDrawable(mBackground);\r
75         }\r
76 \r
77         mWindow.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);\r
78         mWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);\r
79         mWindow.setTouchable(true);\r
80         mWindow.setFocusable(true);\r
81         mWindow.setOutsideTouchable(true);\r
82 \r
83         mWindow.setContentView(mRootView);\r
84     }\r
85 \r
86     /**\r
87      * Set background drawable.\r
88      *\r
89      * @param background Background drawable\r
90      */\r
91     public void setBackgroundDrawable(Drawable background) {\r
92         mBackground = background;\r
93     }\r
94 \r
95     /**\r
96      * Set content view.\r
97      *\r
98      * @param root Root view\r
99      */\r
100     public void setContentView(View root) {\r
101         mRootView = root;\r
102 \r
103         mWindow.setContentView(root);\r
104     }\r
105 \r
106     /**\r
107      * Set content view.\r
108      *\r
109      * @param layoutResID Resource id\r
110      */\r
111     public void setContentView(int layoutResID) {\r
112         LayoutInflater inflator =\r
113                 (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);\r
114 \r
115         setContentView(inflator.inflate(layoutResID, null));\r
116     }\r
117 \r
118     /**\r
119      * Set listener on window dismissed.\r
120      */\r
121     public void setOnDismissListener(PopupWindow.OnDismissListener listener) {\r
122         mWindow.setOnDismissListener(listener);\r
123     }\r
124 \r
125     /**\r
126      * Dismiss the popup window.\r
127      */\r
128     public void dismiss() {\r
129         mWindow.dismiss();\r
130     }\r
131 }