• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.example.android.apis.view;
18 
19 import android.app.Activity;
20 import android.content.Context;
21 import android.os.Bundle;
22 import android.util.AttributeSet;
23 import android.util.DisplayMetrics;
24 import android.view.KeyEvent;
25 import android.view.Menu;
26 import android.view.MenuItem;
27 import android.view.View;
28 import android.view.View.OnClickListener;
29 import android.view.Window;
30 import android.view.WindowManager;
31 import android.widget.ImageView;
32 import android.widget.TextView;
33 
34 import com.example.android.apis.R;
35 
36 /**
37  * This activity demonstrates some of the available ways to reduce the size or visual contrast of
38  * the system decor, in order to better focus the user's attention or use available screen real
39  * estate on the task at hand.
40  */
41 public class OverscanActivity extends Activity {
42     public static class IV extends ImageView {
43         private OverscanActivity mActivity;
IV(Context context)44         public IV(Context context) {
45             super(context);
46         }
IV(Context context, AttributeSet attrs)47         public IV(Context context, AttributeSet attrs) {
48             super(context, attrs);
49         }
setActivity(OverscanActivity act)50         public void setActivity(OverscanActivity act) {
51             mActivity = act;
52         }
onSizeChanged(int w, int h, int oldw, int oldh)53         public void onSizeChanged(int w, int h, int oldw, int oldh) {
54             mActivity.refreshSizes();
55         }
onSystemUiVisibilityChanged(int visibility)56         public void onSystemUiVisibilityChanged(int visibility) {
57             mActivity.getState().onSystemUiVisibilityChanged(visibility);
58         }
59     }
60 
61     private interface State {
apply()62         void apply();
next()63         State next();
onSystemUiVisibilityChanged(int visibility)64         void onSystemUiVisibilityChanged(int visibility);
65     }
66     private class NormalState implements State {
apply()67         public void apply() {
68             display("Normal");
69             setFullscreen(false);
70             mImage.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
71         }
next()72         public State next() {
73             return new FullscreenState();
74         }
onSystemUiVisibilityChanged(int visibility)75         public void onSystemUiVisibilityChanged(int visibility) {
76         }
77     }
78     private class FullscreenState implements State {
apply()79         public void apply() {
80             display("FULLSCREEN");
81             setFullscreen(true);
82         }
next()83         public State next() {
84             return new FullscreenLightsOutState();
85         }
onSystemUiVisibilityChanged(int visibility)86         public void onSystemUiVisibilityChanged(int visibility) {
87         }
88     }
89     private class FullscreenLightsOutState implements State {
apply()90         public void apply() {
91             display("FULLSCREEN + LOW_PROFILE");
92             mImage.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
93         }
next()94         public State next() {
95             return new OverscanState();
96         }
onSystemUiVisibilityChanged(int visibility)97         public void onSystemUiVisibilityChanged(int visibility) {
98         }
99     }
100     private class OverscanState implements State {
apply()101         public void apply() {
102             display("FULLSCREEN + HIDE_NAVIGATION");
103             mImage.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
104         }
next()105         public State next() {
106             return new NormalState();
107         }
onSystemUiVisibilityChanged(int visibility)108         public void onSystemUiVisibilityChanged(int visibility) {
109         }
110     }
111 
setFullscreen(boolean on)112     private void setFullscreen(boolean on) {
113         Window win = getWindow();
114         WindowManager.LayoutParams winParams = win.getAttributes();
115         final int bits = WindowManager.LayoutParams.FLAG_FULLSCREEN;
116         if (on) {
117             winParams.flags |=  bits;
118         } else {
119             winParams.flags &= ~bits;
120         }
121         win.setAttributes(winParams);
122     }
123 
getDisplaySize()124     private String getDisplaySize() {
125         DisplayMetrics dm = getResources().getDisplayMetrics();
126         return String.format("DisplayMetrics = (%d x %d)", dm.widthPixels, dm.heightPixels);
127     }
getViewSize()128     private String getViewSize() {
129         return String.format("View = (%d,%d - %d,%d)",
130                 mImage.getLeft(), mImage.getTop(),
131                 mImage.getRight(), mImage.getBottom());
132     }
refreshSizes()133     void refreshSizes() {
134         mText2.setText(getDisplaySize() + " " + getViewSize());
135     }
display(String text)136     private void display(String text) {
137         mText1.setText(text);
138         refreshSizes();
139     }
getState()140     State getState() {
141         return mState;
142     }
143 
144     static int TOAST_LENGTH = 500;
145     IV mImage;
146     TextView mText1, mText2;
147     State mState;
148 
OverscanActivity()149     public OverscanActivity() {
150     }
151 
152     @Override
onCreate(Bundle savedInstanceState)153     public void onCreate(Bundle savedInstanceState) {
154         super.onCreate(savedInstanceState);
155 
156         // we need to ask for LAYOUT_IN_SCREEN before the window decor appears
157         Window win = getWindow();
158         WindowManager.LayoutParams winParams = win.getAttributes();
159         winParams.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
160         win.setAttributes(winParams);
161 
162         setContentView(R.layout.overscan);
163         mImage = (IV) findViewById(R.id.image);
164         mImage.setActivity(this);
165         mText1 = (TextView) findViewById(R.id.text1);
166         mText2 = (TextView) findViewById(R.id.text2);
167     }
168 
169     @Override
onAttachedToWindow()170     public void onAttachedToWindow() {
171         mState = new NormalState();
172         mState.apply();
173     }
174 
175     @Override
onResume()176     protected void onResume() {
177         super.onResume();
178     }
179 
clicked(View v)180     public void clicked(View v) {
181         mState = mState.next();
182         mState.apply();
183     }
184 }
185