| /* |
| * Copyright (C) 2011 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.example.android.apis.view; |
| |
| import android.app.ActionBar; |
| import android.app.ActionBar.Tab; |
| import android.app.Activity; |
| import android.app.FragmentTransaction; |
| import android.content.Context; |
| import android.content.Intent; |
| import android.net.Uri; |
| import android.os.Bundle; |
| import android.os.Handler; |
| import android.util.AttributeSet; |
| import android.util.Log; |
| import android.view.Menu; |
| import android.view.MenuInflater; |
| import android.view.MenuItem; |
| import android.view.View; |
| import android.view.Window; |
| import android.widget.Button; |
| import android.widget.ImageView; |
| import android.widget.SearchView; |
| import android.widget.SeekBar; |
| import android.widget.ShareActionProvider; |
| import android.widget.TextView; |
| import android.widget.Toast; |
| import android.widget.SearchView.OnQueryTextListener; |
| |
| import com.example.android.apis.R; |
| |
| /** |
| * This activity demonstrates how to use system UI flags to implement |
| * a video player style of UI (where the navigation bar should be hidden |
| * when the user isn't interacting with the screen to achieve full screen |
| * video playback). |
| */ |
| public class VideoPlayerActivity extends Activity |
| implements OnQueryTextListener, ActionBar.TabListener { |
| |
| /** |
| * Implementation of a view for displaying full-screen video playback, |
| * using system UI flags to transition in and out of modes where the entire |
| * screen can be filled with content (at the expense of no user interaction). |
| */ |
| //BEGIN_INCLUDE(content) |
| public static class Content extends ImageView implements |
| View.OnSystemUiVisibilityChangeListener, View.OnClickListener, |
| ActionBar.OnMenuVisibilityListener { |
| Activity mActivity; |
| TextView mTitleView; |
| Button mPlayButton; |
| SeekBar mSeekView; |
| boolean mAddedMenuListener; |
| boolean mMenusOpen; |
| boolean mPaused; |
| boolean mNavVisible; |
| int mLastSystemUiVis; |
| |
| Runnable mNavHider = new Runnable() { |
| @Override public void run() { |
| setNavVisibility(false); |
| } |
| }; |
| |
| public Content(Context context, AttributeSet attrs) { |
| super(context, attrs); |
| setOnSystemUiVisibilityChangeListener(this); |
| setOnClickListener(this); |
| } |
| |
| public void init(Activity activity, TextView title, Button playButton, |
| SeekBar seek) { |
| // This called by the containing activity to supply the surrounding |
| // state of the video player that it will interact with. |
| mActivity = activity; |
| mTitleView = title; |
| mPlayButton = playButton; |
| mSeekView = seek; |
| mPlayButton.setOnClickListener(this); |
| setPlayPaused(true); |
| } |
| |
| @Override protected void onAttachedToWindow() { |
| super.onAttachedToWindow(); |
| if (mActivity != null) { |
| mAddedMenuListener = true; |
| mActivity.getActionBar().addOnMenuVisibilityListener(this); |
| } |
| } |
| |
| @Override protected void onDetachedFromWindow() { |
| super.onDetachedFromWindow(); |
| if (mAddedMenuListener) { |
| mActivity.getActionBar().removeOnMenuVisibilityListener(this); |
| } |
| } |
| |
| @Override public void onSystemUiVisibilityChange(int visibility) { |
| // Detect when we go out of nav-hidden mode, to clear our state |
| // back to having the full UI chrome up. Only do this when |
| // the state is changing and nav is no longer hidden. |
| int diff = mLastSystemUiVis ^ visibility; |
| mLastSystemUiVis = visibility; |
| if ((diff&SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0 |
| && (visibility&SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0) { |
| setNavVisibility(true); |
| } |
| } |
| |
| @Override protected void onWindowVisibilityChanged(int visibility) { |
| super.onWindowVisibilityChanged(visibility); |
| |
| // When we become visible or invisible, play is paused. |
| setPlayPaused(true); |
| } |
| |
| @Override public void onClick(View v) { |
| if (v == mPlayButton) { |
| // Clicking on the play/pause button toggles its state. |
| setPlayPaused(!mPaused); |
| } else { |
| // Clicking elsewhere makes the navigation visible. |
| setNavVisibility(true); |
| } |
| } |
| |
| @Override public void onMenuVisibilityChanged(boolean isVisible) { |
| mMenusOpen = isVisible; |
| setNavVisibility(true); |
| } |
| |
| void setPlayPaused(boolean paused) { |
| mPaused = paused; |
| mPlayButton.setText(paused ? R.string.play : R.string.pause); |
| setKeepScreenOn(!paused); |
| setNavVisibility(true); |
| } |
| |
| void setNavVisibility(boolean visible) { |
| int newVis = SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
| | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
| | SYSTEM_UI_FLAG_LAYOUT_STABLE; |
| if (!visible) { |
| newVis |= SYSTEM_UI_FLAG_LOW_PROFILE | SYSTEM_UI_FLAG_FULLSCREEN |
| | SYSTEM_UI_FLAG_HIDE_NAVIGATION; |
| } |
| |
| // If we are now visible, schedule a timer for us to go invisible. |
| if (visible) { |
| Handler h = getHandler(); |
| if (h != null) { |
| h.removeCallbacks(mNavHider); |
| if (!mMenusOpen && !mPaused) { |
| // If the menus are open or play is paused, we will not auto-hide. |
| h.postDelayed(mNavHider, 3000); |
| } |
| } |
| } |
| |
| // Set the new desired visibility. |
| setSystemUiVisibility(newVis); |
| mTitleView.setVisibility(visible ? VISIBLE : INVISIBLE); |
| mPlayButton.setVisibility(visible ? VISIBLE : INVISIBLE); |
| mSeekView.setVisibility(visible ? VISIBLE : INVISIBLE); |
| } |
| } |
| //END_INCLUDE(content) |
| |
| Content mContent; |
| |
| public VideoPlayerActivity() { |
| } |
| |
| @Override |
| public void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| |
| getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); |
| |
| setContentView(R.layout.video_player); |
| mContent = (Content)findViewById(R.id.content); |
| mContent.init(this, (TextView)findViewById(R.id.title), |
| (Button)findViewById(R.id.play), |
| (SeekBar)findViewById(R.id.seekbar)); |
| |
| ActionBar bar = getActionBar(); |
| bar.addTab(bar.newTab().setText("Tab 1").setTabListener(this)); |
| bar.addTab(bar.newTab().setText("Tab 2").setTabListener(this)); |
| bar.addTab(bar.newTab().setText("Tab 3").setTabListener(this)); |
| } |
| |
| @Override |
| public boolean onCreateOptionsMenu(Menu menu) { |
| MenuInflater inflater = getMenuInflater(); |
| inflater.inflate(R.menu.content_actions, menu); |
| SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); |
| searchView.setOnQueryTextListener(this); |
| |
| // Set file with share history to the provider and set the share intent. |
| MenuItem actionItem = menu.findItem(R.id.menu_item_share_action_provider_action_bar); |
| ShareActionProvider actionProvider = (ShareActionProvider) actionItem.getActionProvider(); |
| actionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME); |
| // Note that you can set/change the intent any time, |
| // say when the user has selected an image. |
| Intent shareIntent = new Intent(Intent.ACTION_SEND); |
| shareIntent.setType("image/*"); |
| Uri uri = Uri.fromFile(getFileStreamPath("shared.png")); |
| shareIntent.putExtra(Intent.EXTRA_STREAM, uri); |
| actionProvider.setShareIntent(shareIntent); |
| return true; |
| } |
| |
| @Override |
| public void onAttachedToWindow() { |
| super.onAttachedToWindow(); |
| } |
| |
| @Override |
| protected void onResume() { |
| super.onResume(); |
| } |
| |
| /** |
| * This method is declared in the menu. |
| */ |
| public void onSort(MenuItem item) { |
| } |
| |
| @Override |
| public boolean onOptionsItemSelected(MenuItem item) { |
| switch (item.getItemId()) { |
| case R.id.show_tabs: |
| getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); |
| item.setChecked(true); |
| return true; |
| case R.id.hide_tabs: |
| getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); |
| item.setChecked(true); |
| return true; |
| } |
| return false; |
| } |
| |
| @Override |
| public boolean onQueryTextChange(String newText) { |
| return true; |
| } |
| |
| @Override |
| public boolean onQueryTextSubmit(String query) { |
| Toast.makeText(this, "Searching for: " + query + "...", Toast.LENGTH_SHORT).show(); |
| return true; |
| } |
| |
| @Override |
| public void onTabSelected(Tab tab, FragmentTransaction ft) { |
| } |
| |
| @Override |
| public void onTabUnselected(Tab tab, FragmentTransaction ft) { |
| } |
| |
| @Override |
| public void onTabReselected(Tab tab, FragmentTransaction ft) { |
| } |
| } |