1905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev/*
2905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev * Copyright (C) 2017 The Android Open Source Project
3905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev *
4905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev * Licensed under the Apache License, Version 2.0 (the "License");
5905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev * you may not use this file except in compliance with the License.
6905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev * You may obtain a copy of the License at
7905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev *
8905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev *      http://www.apache.org/licenses/LICENSE-2.0
9905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev *
10905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev * Unless required by applicable law or agreed to in writing, software
11905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev * distributed under the License is distributed on an "AS IS" BASIS,
12905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev * See the License for the specific language governing permissions and
14905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev * limitations under the License.
15905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev */
16905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
17905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsevpackage com.google.android.car.kitchensink.cluster;
18905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
19905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsevimport android.app.Activity;
20905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsevimport android.car.cluster.CarInstrumentClusterManager;
21905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsevimport android.car.cluster.ClusterActivityState;
22905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsevimport android.graphics.Rect;
23905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsevimport android.os.Bundle;
24905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsevimport android.support.car.Car;
25905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsevimport android.support.car.CarConnectionCallback;
26905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsevimport android.support.car.CarNotConnectedException;
27905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsevimport android.util.Log;
28905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsevimport android.widget.ImageView;
29905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsevimport android.widget.RelativeLayout;
30905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
31905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsevimport com.google.android.car.kitchensink.R;
32905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
33905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev/**
34905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev * Fake navigation activity for instrument cluster.
35905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev */
36905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsevpublic class FakeClusterNavigationActivity
37905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        extends Activity
38905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        implements CarInstrumentClusterManager.Callback {
39905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
40905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev    private final static String TAG = FakeClusterNavigationActivity.class.getSimpleName();
41905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
42905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev    private Car mCarApi;
43905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev    private CarInstrumentClusterManager mClusterManager;
44905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev    private ImageView mUnobscuredArea;
45905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
46905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev    @Override
47905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev    public void onCreate(Bundle savedInstanceState) {
48905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        super.onCreate(savedInstanceState);
49905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        Log.i(TAG, "onCreate");
50905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        setContentView(R.layout.fake_cluster_navigation_activity);
51905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        mUnobscuredArea = findViewById(R.id.unobscuredArea);
52905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
53905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        mCarApi = Car.createCar(this /* context */, new CarConnectionCallback() {
54905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
55905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev            @Override
56905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev            public void onConnected(Car car) {
57905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev                onCarConnected(car);
58905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev            }
59905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
60905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev            @Override
61905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev            public void onDisconnected(Car car) {
62905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev                onCarDisconnected(car);
63905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev            }
64905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        });
65905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        Log.i(TAG, "Connecting to car api...");
66905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        mCarApi.connect();
67905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev    }
68905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
69905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
70905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev    @Override
71905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev    public void onClusterActivityStateChanged(String category, Bundle clusterActivityState) {
72905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        ClusterActivityState state = ClusterActivityState.fromBundle(clusterActivityState);
73905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        Log.i(TAG, "onClusterActivityStateChanged, category: " + category + ", state: " + state);
74905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
75905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        Rect unobscured = state.getUnobscuredBounds();
76905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
77905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev                unobscured.width(), unobscured.height());
78905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        lp.setMargins(unobscured.left, unobscured.top, 0, 0);
79905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        mUnobscuredArea.setLayoutParams(lp);
80905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev    }
81905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
82905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev    private void onCarConnected(Car car) {
83905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        Log.i(TAG, "onCarConnected, car: " + car);
84905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        try {
85905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev            mClusterManager = (CarInstrumentClusterManager) car.getCarManager(
86905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev                    android.car.Car.CAR_INSTRUMENT_CLUSTER_SERVICE);
87905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        } catch (CarNotConnectedException e) {
88905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev            throw new IllegalStateException(e);
89905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        }
90905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
91905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        try {
92905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev            Log.i(TAG, "registering callback...");
93905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev            mClusterManager.registerCallback(CarInstrumentClusterManager.CATEGORY_NAVIGATION, this);
94905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev            Log.i(TAG, "callback registered");
95905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        } catch (android.car.CarNotConnectedException e) {
96905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev            throw new IllegalStateException(e);
97905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev        }
98905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev    }
99905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
100905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev    private void onCarDisconnected(Car car) {
101905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev
102905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev    }
103905968cf95d4c8608d6d9351b5dd10fe994a1220Pavel Maltsev}