18f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown/* 28f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * Copyright (C) 2013 The Android Open Source Project 38f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * 48f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 58f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * you may not use this file except in compliance with the License. 68f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * You may obtain a copy of the License at 78f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * 88f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 98f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * 108f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * Unless required by applicable law or agreed to in writing, software 118f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 128f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * See the License for the specific language governing permissions and 148f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * limitations under the License. 158f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown */ 168f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 178f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownpackage com.android.accessorydisplay.source.presentation; 188f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 198f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport com.android.accessorydisplay.common.Logger; 208f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport com.android.accessorydisplay.source.R; 218f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 228f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport android.app.Presentation; 238f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport android.content.Context; 248f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport android.content.res.Resources; 258f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport android.opengl.GLSurfaceView; 268f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport android.os.Bundle; 278f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport android.view.Display; 288f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport android.view.MotionEvent; 298f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport android.view.View; 308f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport android.widget.Button; 318f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 328f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown/** 338f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * The presentation to show on the accessory display. 348f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * <p> 358f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * Note that this display may have different metrics from the display on which 368f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * the main activity is showing so we must be careful to use the presentation's 378f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * own {@link Context} whenever we load resources. 388f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * </p> 398f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown */ 408f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownpublic final class DemoPresentation extends Presentation { 418f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown private final Logger mLogger; 428f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 438f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown private GLSurfaceView mSurfaceView; 448f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown private CubeRenderer mRenderer; 458f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown private Button mExplodeButton; 468f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 478f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown public DemoPresentation(Context context, Display display, Logger logger) { 488f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown super(context, display); 498f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mLogger = logger; 508f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown } 518f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 528f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown @Override 538f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown protected void onCreate(Bundle savedInstanceState) { 548f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown // Be sure to call the super class. 558f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown super.onCreate(savedInstanceState); 568f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 578f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown // Get the resources for the context of the presentation. 588f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown // Notice that we are getting the resources from the context of the presentation. 598f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown Resources r = getContext().getResources(); 608f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 618f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown // Inflate the layout. 628f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown setContentView(R.layout.presentation_content); 638f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 648f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown // Set up the surface view for visual interest. 658f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mRenderer = new CubeRenderer(false); 668f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mSurfaceView = (GLSurfaceView)findViewById(R.id.surface_view); 678f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mSurfaceView.setRenderer(mRenderer); 688f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 698f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown // Add a button. 708f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mExplodeButton = (Button)findViewById(R.id.explode_button); 718f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mExplodeButton.setOnClickListener(new View.OnClickListener() { 728f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown @Override 738f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown public void onClick(View v) { 748f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mRenderer.explode(); 758f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown } 768f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown }); 778f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown } 788f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 798f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown @Override 808f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown public boolean onTouchEvent(MotionEvent event) { 818f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mLogger.log("Received touch event: " + event); 828f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown return super.onTouchEvent(event); 838f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown } 848f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown}