13de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn/* 23de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn * Copyright (C) 2011 The Android Open Source Project 33de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn * 43de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 53de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn * you may not use this file except in compliance with the License. 63de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn * You may obtain a copy of the License at 73de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn * 83de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 93de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn * 103de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 113de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 123de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn * See the License for the specific language governing permissions and 143de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn * limitations under the License. 153de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn */ 163de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn 173de0bf970aad60095b455f9717e8035447df49b1Dianne Hackbornpackage com.example.android.apis.view; 183de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn 193de0bf970aad60095b455f9717e8035447df49b1Dianne Hackbornimport android.app.Activity; 203de0bf970aad60095b455f9717e8035447df49b1Dianne Hackbornimport android.content.Intent; 213de0bf970aad60095b455f9717e8035447df49b1Dianne Hackbornimport android.net.Uri; 223de0bf970aad60095b455f9717e8035447df49b1Dianne Hackbornimport android.os.Bundle; 233de0bf970aad60095b455f9717e8035447df49b1Dianne Hackbornimport android.view.Menu; 243de0bf970aad60095b455f9717e8035447df49b1Dianne Hackbornimport android.view.MenuInflater; 253de0bf970aad60095b455f9717e8035447df49b1Dianne Hackbornimport android.view.MenuItem; 263de0bf970aad60095b455f9717e8035447df49b1Dianne Hackbornimport android.view.WindowId; 273de0bf970aad60095b455f9717e8035447df49b1Dianne Hackbornimport android.view.WindowId.FocusObserver; 283de0bf970aad60095b455f9717e8035447df49b1Dianne Hackbornimport android.widget.SearchView; 293de0bf970aad60095b455f9717e8035447df49b1Dianne Hackbornimport android.widget.ShareActionProvider; 303de0bf970aad60095b455f9717e8035447df49b1Dianne Hackbornimport android.widget.TextView; 313de0bf970aad60095b455f9717e8035447df49b1Dianne Hackbornimport android.widget.Toast; 323de0bf970aad60095b455f9717e8035447df49b1Dianne Hackbornimport com.example.android.apis.R; 333de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn 343de0bf970aad60095b455f9717e8035447df49b1Dianne Hackbornpublic class WindowFocusObserver extends Activity implements SearchView.OnQueryTextListener { 353de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn TextView mState; 363de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn 373de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn final FocusObserver mObserver = new WindowId.FocusObserver() { 383de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn 393de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn @Override 403de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn public void onFocusGained(WindowId token) { 413de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn mState.setText("Gained focus"); 423de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn } 433de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn 443de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn @Override 453de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn public void onFocusLost(WindowId token) { 463de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn mState.setText("Lost focus"); 473de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn } 483de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn }; 493de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn 503de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn @Override 513de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn public void onCreate(Bundle savedInstanceState) { 523de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn super.onCreate(savedInstanceState); 533de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn 543de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn setContentView(R.layout.window_focus_observer); 553de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn mState = (TextView)findViewById(R.id.focus_state); 563de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn } 573de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn 583de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn @Override 593de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn public boolean onCreateOptionsMenu(Menu menu) { 603de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn MenuInflater inflater = getMenuInflater(); 613de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn inflater.inflate(R.menu.content_actions, menu); 623de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 633de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn searchView.setOnQueryTextListener(this); 643de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn 653de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn // Set file with share history to the provider and set the share intent. 663de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn MenuItem actionItem = menu.findItem(R.id.menu_item_share_action_provider_action_bar); 673de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn ShareActionProvider actionProvider = (ShareActionProvider) actionItem.getActionProvider(); 683de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn actionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME); 693de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn // Note that you can set/change the intent any time, 703de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn // say when the user has selected an image. 713de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn Intent shareIntent = new Intent(Intent.ACTION_SEND); 723de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn shareIntent.setType("image/*"); 733de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn Uri uri = Uri.fromFile(getFileStreamPath("shared.png")); 743de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn shareIntent.putExtra(Intent.EXTRA_STREAM, uri); 753de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn actionProvider.setShareIntent(shareIntent); 763de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn return true; 773de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn } 783de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn 793de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn public void onSort(MenuItem item) { 803de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn } 813de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn 823de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn @Override 833de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn public boolean onQueryTextChange(String newText) { 843de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn return true; 853de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn } 863de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn 873de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn @Override 883de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn public boolean onQueryTextSubmit(String query) { 893de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn Toast.makeText(this, "Searching for: " + query + "...", Toast.LENGTH_SHORT).show(); 903de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn return true; 913de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn } 923de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn 933de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn @Override 943de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn public void onAttachedToWindow() { 953de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn super.onAttachedToWindow(); 963de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn WindowId token = getWindow().getDecorView().getWindowId(); 973de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn token.registerFocusObserver(mObserver); 983de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn mState.setText(token.isFocused() ? "Focused" : "Not focused"); 993de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn } 1003de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn 1013de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn @Override 1023de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn public void onDetachedFromWindow() { 1033de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn super.onDetachedFromWindow(); 1043de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn getWindow().getDecorView().getWindowId().unregisterFocusObserver(mObserver); 1053de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn } 1063de0bf970aad60095b455f9717e8035447df49b1Dianne Hackborn} 107