| /* |
| * 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.Activity; |
| import android.app.FragmentTransaction; |
| import android.app.ActionBar.Tab; |
| import android.content.Context; |
| import android.content.Intent; |
| import android.net.Uri; |
| import android.os.Bundle; |
| import android.util.AttributeSet; |
| import android.util.DisplayMetrics; |
| import android.view.ActionMode; |
| import android.view.KeyEvent; |
| import android.view.Menu; |
| import android.view.MenuInflater; |
| import android.view.MenuItem; |
| import android.view.View; |
| import android.view.View.OnClickListener; |
| import android.view.Window; |
| import android.view.WindowManager; |
| import android.widget.CheckBox; |
| import android.widget.CompoundButton; |
| import android.widget.ImageView; |
| import android.widget.SearchView; |
| 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 some of the available ways to reduce the size or visual contrast of |
| * the system decor, in order to better focus the user's attention or use available screen real |
| * estate on the task at hand. |
| */ |
| public class OverscanActivity extends Activity |
| implements OnQueryTextListener, ActionBar.TabListener { |
| public static class IV extends ImageView implements View.OnSystemUiVisibilityChangeListener { |
| private OverscanActivity mActivity; |
| private ActionMode mActionMode; |
| public IV(Context context) { |
| super(context); |
| } |
| public IV(Context context, AttributeSet attrs) { |
| super(context, attrs); |
| } |
| public void setActivity(OverscanActivity act) { |
| setOnSystemUiVisibilityChangeListener(this); |
| mActivity = act; |
| } |
| @Override |
| public void onSizeChanged(int w, int h, int oldw, int oldh) { |
| mActivity.refreshSizes(); |
| } |
| @Override |
| public void onSystemUiVisibilityChange(int visibility) { |
| mActivity.updateCheckControls(); |
| mActivity.refreshSizes(); |
| } |
| |
| private class MyActionModeCallback implements ActionMode.Callback { |
| @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { |
| mode.setTitle("My Action Mode!"); |
| mode.setSubtitle(null); |
| mode.setTitleOptionalHint(false); |
| menu.add("Sort By Size").setIcon(android.R.drawable.ic_menu_sort_by_size); |
| menu.add("Sort By Alpha").setIcon(android.R.drawable.ic_menu_sort_alphabetically); |
| return true; |
| } |
| |
| @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { |
| return true; |
| } |
| |
| @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { |
| return true; |
| } |
| |
| @Override public void onDestroyActionMode(ActionMode mode) { |
| mActionMode = null; |
| mActivity.clearActionMode(); |
| } |
| } |
| |
| public void startActionMode() { |
| if (mActionMode == null) { |
| ActionMode.Callback cb = new MyActionModeCallback(); |
| mActionMode = startActionMode(cb); |
| } |
| } |
| |
| public void stopActionMode() { |
| if (mActionMode != null) { |
| mActionMode.finish(); |
| } |
| } |
| } |
| |
| private void setFullscreen(boolean on) { |
| Window win = getWindow(); |
| WindowManager.LayoutParams winParams = win.getAttributes(); |
| final int bits = WindowManager.LayoutParams.FLAG_FULLSCREEN; |
| if (on) { |
| winParams.flags |= bits; |
| } else { |
| winParams.flags &= ~bits; |
| } |
| win.setAttributes(winParams); |
| } |
| |
| private void setOverscan(boolean on) { |
| Window win = getWindow(); |
| WindowManager.LayoutParams winParams = win.getAttributes(); |
| final int bits = WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN; |
| if (on) { |
| winParams.flags |= bits; |
| } else { |
| winParams.flags &= ~bits; |
| } |
| win.setAttributes(winParams); |
| } |
| |
| private String getDisplaySize() { |
| DisplayMetrics dm = getResources().getDisplayMetrics(); |
| return String.format("DisplayMetrics = (%d x %d)", dm.widthPixels, dm.heightPixels); |
| } |
| private String getViewSize() { |
| return String.format("View = (%d,%d - %d,%d)", |
| mImage.getLeft(), mImage.getTop(), |
| mImage.getRight(), mImage.getBottom()); |
| } |
| void refreshSizes() { |
| mMetricsText.setText(getDisplaySize() + " " + getViewSize()); |
| } |
| |
| static int TOAST_LENGTH = 500; |
| IV mImage; |
| CheckBox[] mCheckControls = new CheckBox[6]; |
| int[] mCheckFlags = new int[] { View.SYSTEM_UI_FLAG_LOW_PROFILE, |
| View.SYSTEM_UI_FLAG_FULLSCREEN, View.SYSTEM_UI_FLAG_HIDE_NAVIGATION, |
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE, View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN, |
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
| }; |
| TextView mMetricsText; |
| |
| public OverscanActivity() { |
| } |
| |
| @Override |
| public void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| |
| getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); |
| |
| setContentView(R.layout.overscan); |
| mImage = (IV) findViewById(R.id.image); |
| mImage.setActivity(this); |
| |
| CompoundButton.OnCheckedChangeListener checkChangeListener |
| = new CompoundButton.OnCheckedChangeListener() { |
| @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { |
| updateSystemUi(); |
| } |
| }; |
| mCheckControls[0] = (CheckBox) findViewById(R.id.modeLowProfile); |
| mCheckControls[1] = (CheckBox) findViewById(R.id.modeFullscreen); |
| mCheckControls[2] = (CheckBox) findViewById(R.id.modeHideNavigation); |
| mCheckControls[3] = (CheckBox) findViewById(R.id.layoutStable); |
| mCheckControls[4] = (CheckBox) findViewById(R.id.layoutFullscreen); |
| mCheckControls[5] = (CheckBox) findViewById(R.id.layoutHideNavigation); |
| for (int i=0; i<mCheckControls.length; i++) { |
| mCheckControls[i].setOnCheckedChangeListener(checkChangeListener); |
| } |
| ((CheckBox) findViewById(R.id.windowFullscreen)).setOnCheckedChangeListener( |
| new CompoundButton.OnCheckedChangeListener() { |
| @Override |
| public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { |
| setFullscreen(isChecked); |
| } |
| } |
| ); |
| ((CheckBox) findViewById(R.id.windowOverscan)).setOnCheckedChangeListener( |
| new CompoundButton.OnCheckedChangeListener() { |
| @Override |
| public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { |
| setOverscan(isChecked); |
| } |
| } |
| ); |
| ((CheckBox) findViewById(R.id.windowHideActionBar)).setOnCheckedChangeListener( |
| new CompoundButton.OnCheckedChangeListener() { |
| @Override |
| public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { |
| if (isChecked) { |
| getActionBar().hide(); |
| } else { |
| getActionBar().show(); |
| } |
| } |
| } |
| ); |
| ((CheckBox) findViewById(R.id.windowActionMode)).setOnCheckedChangeListener( |
| new CompoundButton.OnCheckedChangeListener() { |
| @Override |
| public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { |
| if (isChecked) { |
| mImage.startActionMode(); |
| } else { |
| mImage.stopActionMode(); |
| } |
| } |
| } |
| ); |
| mMetricsText = (TextView) findViewById(R.id.metricsText); |
| } |
| |
| @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() { |
| updateCheckControls(); |
| } |
| |
| @Override |
| protected void onResume() { |
| super.onResume(); |
| } |
| |
| public void onSort(MenuItem item) { |
| } |
| |
| @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 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 void onTabSelected(Tab tab, FragmentTransaction ft) { |
| } |
| |
| @Override |
| public void onTabUnselected(Tab tab, FragmentTransaction ft) { |
| } |
| |
| @Override |
| public void onTabReselected(Tab tab, FragmentTransaction ft) { |
| } |
| |
| public void updateCheckControls() { |
| int visibility = mImage.getSystemUiVisibility(); |
| for (int i=0; i<mCheckControls.length; i++) { |
| mCheckControls[i].setChecked((visibility&mCheckFlags[i]) != 0); |
| } |
| } |
| |
| public void updateSystemUi() { |
| int visibility = 0; |
| for (int i=0; i<mCheckControls.length; i++) { |
| if (mCheckControls[i].isChecked()) { |
| visibility |= mCheckFlags[i]; |
| } |
| } |
| mImage.setSystemUiVisibility(visibility); |
| } |
| |
| public void clearActionMode() { |
| ((CheckBox) findViewById(R.id.windowActionMode)).setChecked(false); |
| } |
| } |