22
33import android .content .Intent ;
44import android .content .pm .ActivityInfo ;
5+ import android .content .res .Configuration ;
6+ import android .content .res .Resources ;
57import android .media .MediaPlayer ;
68import android .net .Uri ;
9+ import android .os .Build ;
710import android .os .Bundle ;
811import android .os .Handler ;
912import android .support .v7 .app .ActionBar ;
1013import android .support .v7 .app .AppCompatActivity ;
14+ import android .util .DisplayMetrics ;
1115import android .util .Log ;
1216import android .view .Display ;
1317import android .view .Menu ;
1721import android .view .View ;
1822import android .view .WindowManager ;
1923import android .widget .Button ;
24+ import android .widget .FrameLayout ;
25+ import android .widget .LinearLayout ;
2026import android .widget .MediaController ;
2127import android .widget .ProgressBar ;
28+ import android .widget .SeekBar ;
2229import android .widget .VideoView ;
2330
2431/**
@@ -50,6 +57,7 @@ public class PlayVideoActivity extends AppCompatActivity {
5057 private static final String POSITION = "position" ;
5158
5259 private static final long HIDING_DELAY = 3000 ;
60+ private static final long TAB_HIDING_DELAY = 100 ;
5361
5462 private String videoUrl = "" ;
5563
@@ -61,13 +69,18 @@ public class PlayVideoActivity extends AppCompatActivity {
6169 private View decorView ;
6270 private boolean uiIsHidden = false ;
6371 private static long lastUiShowTime = 0 ;
72+ private boolean isLandscape = true ;
73+ private boolean hasSoftKeys = false ;
6474
6575 @ Override
6676 protected void onCreate (Bundle savedInstanceState ) {
6777 super .onCreate (savedInstanceState );
6878
6979 setContentView (R .layout .activity_play_video );
7080
81+ isLandscape = checkIfLandscape ();
82+ hasSoftKeys = checkIfhasSoftKeys ();
83+
7184 actionBar = getSupportActionBar ();
7285 actionBar .setDisplayHomeAsUpEnabled (true );
7386 Intent intent = getIntent ();
@@ -91,6 +104,7 @@ public void onPrepared(MediaPlayer mp) {
91104 videoView .seekTo (position );
92105 if (position == 0 ) {
93106 videoView .start ();
107+ showUi ();
94108 } else {
95109 videoView .pause ();
96110 }
@@ -113,16 +127,21 @@ public void onClick(View v) {
113127 decorView .setOnSystemUiVisibilityChangeListener (new View .OnSystemUiVisibilityChangeListener () {
114128 @ Override
115129 public void onSystemUiVisibilityChange (int visibility ) {
116- if ((visibility & View .SYSTEM_UI_FLAG_FULLSCREEN ) == 0 ) {
117- uiIsHidden = false ;
130+ if (visibility == View .VISIBLE && uiIsHidden ) {
118131 showUi ();
119- } else {
120- uiIsHidden = true ;
121- hideUi ();
122132 }
123133 }
124134 });
125- showUi ();
135+
136+ decorView .setSystemUiVisibility (View .SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
137+ | View .SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
138+ | View .SYSTEM_UI_FLAG_LAYOUT_STABLE );
139+ }
140+
141+ @ Override
142+ protected void onPostCreate (Bundle savedInstanceState ) {
143+ super .onPostCreate (savedInstanceState );
144+
126145 }
127146
128147 @ Override
@@ -166,8 +185,16 @@ public boolean onOptionsItemSelected(MenuItem item) {
166185 }
167186
168187 @ Override
169- protected void onPostCreate (Bundle savedInstanceState ) {
170- super .onPostCreate (savedInstanceState );
188+ public void onConfigurationChanged (Configuration config ) {
189+ super .onConfigurationChanged (config );
190+
191+ if (config .orientation == Configuration .ORIENTATION_LANDSCAPE ) {
192+ isLandscape = true ;
193+ adjustMediaControllMetrics ();
194+ } else if (config .orientation == Configuration .ORIENTATION_PORTRAIT ){
195+ isLandscape = false ;
196+ adjustMediaControllMetrics ();
197+ }
171198 }
172199
173200 @ Override
@@ -187,15 +214,15 @@ public void onRestoreInstanceState(Bundle savedInstanceState) {
187214 private void showUi () {
188215 try {
189216 uiIsHidden = false ;
190- mediaController .show ();
217+ mediaController .show (100000 );
191218 actionBar .show ();
192- //decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN );
193- //| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION );
219+ adjustMediaControllMetrics ( );
220+ getWindow (). clearFlags ( WindowManager . LayoutParams . FLAG_FULLSCREEN );
194221 Handler handler = new Handler ();
195222 handler .postDelayed (new Runnable () {
196223 @ Override
197224 public void run () {
198- if ((System .currentTimeMillis () - lastUiShowTime ) > HIDING_DELAY ) {
225+ if ((System .currentTimeMillis () - lastUiShowTime ) >= HIDING_DELAY ) {
199226 hideUi ();
200227 }
201228 }
@@ -210,8 +237,75 @@ private void hideUi() {
210237 uiIsHidden = true ;
211238 actionBar .hide ();
212239 mediaController .hide ();
213- getWindow ().addFlags (WindowManager .LayoutParams .FLAG_FULLSCREEN );
214- //decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
215- //| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
240+ decorView .setSystemUiVisibility (View .SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
241+ | View .SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
242+ | View .SYSTEM_UI_FLAG_FULLSCREEN
243+ | View .SYSTEM_UI_FLAG_HIDE_NAVIGATION
244+ | View .SYSTEM_UI_FLAG_LAYOUT_STABLE );
245+ getWindow ().setFlags (WindowManager .LayoutParams .FLAG_FULLSCREEN ,
246+ WindowManager .LayoutParams .FLAG_FULLSCREEN );
247+ }
248+
249+ private void adjustMediaControllMetrics () {
250+ MediaController .LayoutParams mediaControllerLayout
251+ = new MediaController .LayoutParams (MediaController .LayoutParams .MATCH_PARENT ,
252+ MediaController .LayoutParams .WRAP_CONTENT );
253+
254+ if (!hasSoftKeys ) {
255+ mediaControllerLayout .setMargins (20 , 0 , 20 , 20 );
256+ } else {
257+ int width = getNavigationBarWidth ();
258+ int height = getNavigationBarHeight ();
259+ mediaControllerLayout .setMargins (width + 20 , 0 , width + 20 , height + 20 );
260+ }
261+ mediaController .setLayoutParams (mediaControllerLayout );
262+ }
263+
264+ private boolean checkIfhasSoftKeys (){
265+ if (Build .VERSION .SDK_INT >= 17 ) {
266+ return getNavigationBarHeight () != 0 || getNavigationBarWidth () != 0 ;
267+ } else {
268+ return true ;
269+ }
270+ }
271+
272+ private int getNavigationBarHeight () {
273+ if (Build .VERSION .SDK_INT >= 17 ) {
274+ Display d = getWindowManager ().getDefaultDisplay ();
275+
276+ DisplayMetrics realDisplayMetrics = new DisplayMetrics ();
277+ d .getRealMetrics (realDisplayMetrics );
278+ DisplayMetrics displayMetrics = new DisplayMetrics ();
279+ d .getMetrics (displayMetrics );
280+
281+ int realHeight = realDisplayMetrics .heightPixels ;
282+ int displayHeight = displayMetrics .heightPixels ;
283+ return (realHeight - displayHeight );
284+ } else {
285+ return 50 ;
286+ }
287+ }
288+
289+ private int getNavigationBarWidth () {
290+ if (Build .VERSION .SDK_INT >= 17 ) {
291+ Display d = getWindowManager ().getDefaultDisplay ();
292+
293+ DisplayMetrics realDisplayMetrics = new DisplayMetrics ();
294+ d .getRealMetrics (realDisplayMetrics );
295+ DisplayMetrics displayMetrics = new DisplayMetrics ();
296+ d .getMetrics (displayMetrics );
297+
298+ int realWidth = realDisplayMetrics .widthPixels ;
299+ int displayWidth = displayMetrics .widthPixels ;
300+ return (realWidth - displayWidth );
301+ } else {
302+ return 50 ;
303+ }
304+ }
305+
306+ public boolean checkIfLandscape () {
307+ DisplayMetrics displayMetrics = new DisplayMetrics ();
308+ getWindowManager ().getDefaultDisplay ().getMetrics (displayMetrics );
309+ return displayMetrics .heightPixels < displayMetrics .widthPixels ;
216310 }
217311}
0 commit comments