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}