| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chromoting; | 5 package org.chromium.chromoting; |
| 6 | 6 |
| 7 import android.annotation.TargetApi; |
| 7 import android.app.Activity; | 8 import android.app.Activity; |
| 8 import android.content.res.Configuration; | 9 import android.content.res.Configuration; |
| 9 import android.os.Build; | 10 import android.os.Build; |
| 10 import android.os.Bundle; | 11 import android.os.Bundle; |
| 11 import android.view.KeyEvent; | 12 import android.view.KeyEvent; |
| 12 import android.view.Menu; | 13 import android.view.Menu; |
| 13 import android.view.MenuItem; | 14 import android.view.MenuItem; |
| 14 import android.view.View; | 15 import android.view.View; |
| 15 import android.view.inputmethod.InputMethodManager; | 16 import android.view.inputmethod.InputMethodManager; |
| 16 import android.widget.ImageButton; | 17 import android.widget.ImageButton; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 @Override | 73 @Override |
| 73 public void onSystemUiVisibilityChange(int visibility) { | 74 public void onSystemUiVisibilityChange(int visibility) { |
| 74 // Ensure the action-bar's visibility matches that of the system control
s. This | 75 // Ensure the action-bar's visibility matches that of the system control
s. This |
| 75 // minimizes the number of states the UI can be in, to keep things simpl
e for the user. | 76 // minimizes the number of states the UI can be in, to keep things simpl
e for the user. |
| 76 | 77 |
| 77 // Determine if the system is in fullscreen/lights-out mode. LOW_PROFILE
is needed since | 78 // Determine if the system is in fullscreen/lights-out mode. LOW_PROFILE
is needed since |
| 78 // it's the only flag supported in 4.0. But it is not sufficient in itse
lf; when | 79 // it's the only flag supported in 4.0. But it is not sufficient in itse
lf; when |
| 79 // IMMERSIVE_STICKY mode is used, the system clears this flag (leaving t
he FULLSCREEN flag | 80 // IMMERSIVE_STICKY mode is used, the system clears this flag (leaving t
he FULLSCREEN flag |
| 80 // set) when the user swipes the edge to reveal the bars temporarily. Wh
en this happens, | 81 // set) when the user swipes the edge to reveal the bars temporarily. Wh
en this happens, |
| 81 // the action-bar should remain hidden. | 82 // the action-bar should remain hidden. |
| 82 int fullscreenFlags = View.SYSTEM_UI_FLAG_LOW_PROFILE; | 83 int fullscreenFlags = getSystemUiFlags(); |
| 83 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | |
| 84 fullscreenFlags |= View.SYSTEM_UI_FLAG_FULLSCREEN; | |
| 85 } | |
| 86 if ((visibility & fullscreenFlags) != 0) { | 84 if ((visibility & fullscreenFlags) != 0) { |
| 87 hideActionBar(); | 85 hideActionBar(); |
| 88 } else { | 86 } else { |
| 89 showActionBar(); | 87 showActionBar(); |
| 90 } | 88 } |
| 91 } | 89 } |
| 92 | 90 |
| 91 @TargetApi(Build.VERSION_CODES.JELLY_BEAN) |
| 92 private int getSystemUiFlags() { |
| 93 int flags = View.SYSTEM_UI_FLAG_LOW_PROFILE; |
| 94 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { |
| 95 flags |= View.SYSTEM_UI_FLAG_FULLSCREEN; |
| 96 } |
| 97 return flags; |
| 98 } |
| 99 |
| 93 public void showActionBar() { | 100 public void showActionBar() { |
| 94 mOverlayButton.setVisibility(View.INVISIBLE); | 101 mOverlayButton.setVisibility(View.INVISIBLE); |
| 95 getActionBar().show(); | 102 getActionBar().show(); |
| 96 | 103 |
| 97 View decorView = getWindow().getDecorView(); | 104 View decorView = getWindow().getDecorView(); |
| 98 decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); | 105 decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); |
| 99 } | 106 } |
| 100 | 107 |
| 101 public void hideActionBar() { | 108 public void hideActionBar() { |
| 102 mOverlayButton.setVisibility(View.VISIBLE); | 109 mOverlayButton.setVisibility(View.VISIBLE); |
| 103 getActionBar().hide(); | 110 getActionBar().hide(); |
| 104 | 111 |
| 105 View decorView = getWindow().getDecorView(); | 112 View decorView = getWindow().getDecorView(); |
| 106 | 113 |
| 107 // LOW_PROFILE gives the status and navigation bars a "lights-out" appea
rance. | 114 // LOW_PROFILE gives the status and navigation bars a "lights-out" appea
rance. |
| 108 // FULLSCREEN hides the status bar on supported devices (4.1 and above). | 115 // FULLSCREEN hides the status bar on supported devices (4.1 and above). |
| 109 int flags = View.SYSTEM_UI_FLAG_LOW_PROFILE; | 116 int flags = getSystemUiFlags(); |
| 110 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { | |
| 111 flags |= View.SYSTEM_UI_FLAG_FULLSCREEN; | |
| 112 } | |
| 113 | 117 |
| 114 // HIDE_NAVIGATION hides the navigation bar. However, if the user touche
s the screen, the | 118 // HIDE_NAVIGATION hides the navigation bar. However, if the user touche
s the screen, the |
| 115 // event is not seen by the application and instead the navigation bar i
s re-shown. | 119 // event is not seen by the application and instead the navigation bar i
s re-shown. |
| 116 // IMMERSIVE(_STICKY) fixes this problem and allows the user to interact
with the app while | 120 // IMMERSIVE(_STICKY) fixes this problem and allows the user to interact
with the app while |
| 117 // keeping the navigation controls hidden. This flag was introduced in 4
.4, later than | 121 // keeping the navigation controls hidden. This flag was introduced in 4
.4, later than |
| 118 // HIDE_NAVIGATION, and so a runtime check is needed before setting eith
er of these flags. | 122 // HIDE_NAVIGATION, and so a runtime check is needed before setting eith
er of these flags. |
| 119 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { | 123 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { |
| 120 flags |= (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_
IMMERSIVE_STICKY); | 124 flags |= (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_
IMMERSIVE_STICKY); |
| 121 } | 125 } |
| 122 | 126 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 break; | 216 break; |
| 213 | 217 |
| 214 default: | 218 default: |
| 215 // We try to send all other key codes to the host directly. | 219 // We try to send all other key codes to the host directly. |
| 216 JniInterface.sendKeyEvent(event.getKeyCode(), depressed); | 220 JniInterface.sendKeyEvent(event.getKeyCode(), depressed); |
| 217 } | 221 } |
| 218 | 222 |
| 219 return super.dispatchKeyEvent(event); | 223 return super.dispatchKeyEvent(event); |
| 220 } | 224 } |
| 221 } | 225 } |
| OLD | NEW |