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