| /* |
| * Copyright (C) 2012 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| |
| package com.android.tools.sdkcontroller.activities; |
| |
| import android.content.Intent; |
| import android.os.Bundle; |
| import android.util.Log; |
| import android.view.View; |
| import android.view.View.OnClickListener; |
| import android.webkit.WebView; |
| import android.widget.Button; |
| import android.widget.CompoundButton; |
| import android.widget.CompoundButton.OnCheckedChangeListener; |
| import android.widget.TextView; |
| import android.widget.ToggleButton; |
| |
| import com.android.tools.sdkcontroller.R; |
| import com.android.tools.sdkcontroller.service.ControllerService; |
| import com.android.tools.sdkcontroller.service.ControllerService.ControllerBinder; |
| import com.android.tools.sdkcontroller.service.ControllerService.ControllerListener; |
| |
| /** |
| * Main activity. It's the entry point for the application. |
| * It allows the user to start/stop the service and see it's current state and errors. |
| * It also has buttons to start either the sensor control activity or the multitouch activity. |
| */ |
| public class MainActivity extends BaseBindingActivity { |
| |
| @SuppressWarnings("hiding") |
| public static String TAG = MainActivity.class.getSimpleName(); |
| private static boolean DEBUG = true; |
| private Button mBtnOpenMultitouch; |
| private Button mBtnOpenSensors; |
| private ToggleButton mBtnToggleService; |
| private TextView mTextError; |
| private TextView mTextStatus; |
| |
| /** Called when the activity is first created. */ |
| @Override |
| public void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| setContentView(R.layout.main); |
| |
| mTextError = (TextView) findViewById(R.id.textError); |
| mTextStatus = (TextView) findViewById(R.id.textStatus); |
| |
| WebView wv = (WebView) findViewById(R.id.webIntro); |
| wv.loadUrl("file:///android_asset/intro_help.html"); |
| |
| setupButtons(); |
| } |
| |
| @Override |
| protected void onResume() { |
| // BaseBindingActivity.onResume will bind to the service. |
| super.onResume(); |
| updateError(); |
| } |
| |
| @Override |
| protected void onPause() { |
| // BaseBindingActivity.onResume will unbind from (but not stop) the service. |
| super.onPause(); |
| } |
| |
| @Override |
| public void onBackPressed() { |
| if (DEBUG) Log.d(TAG, "onBackPressed"); |
| // If back is pressed, we stop the service automatically. |
| // It seems more intuitive that way. |
| stopService(); |
| super.onBackPressed(); |
| } |
| |
| // ---------- |
| |
| @Override |
| protected void onServiceConnected() { |
| updateButtons(); |
| } |
| |
| @Override |
| protected void onServiceDisconnected() { |
| updateButtons(); |
| } |
| |
| @Override |
| protected ControllerListener createControllerListener() { |
| return new MainControllerListener(); |
| } |
| |
| // ---------- |
| |
| private void setupButtons() { |
| mBtnOpenMultitouch = (Button) findViewById(R.id.btnOpenMultitouch); |
| mBtnOpenSensors = (Button) findViewById(R.id.btnOpenSensors); |
| |
| mBtnOpenMultitouch.setOnClickListener(new OnClickListener() { |
| @Override |
| public void onClick(View v) { |
| // Open the multi-touch activity. |
| Intent i = new Intent(MainActivity.this, MultiTouchActivity.class); |
| startActivity(i); |
| } |
| }); |
| |
| mBtnOpenSensors.setOnClickListener(new OnClickListener() { |
| @Override |
| public void onClick(View v) { |
| // Open the sensor activity. |
| Intent i = new Intent(MainActivity.this, SensorActivity.class); |
| startActivity(i); |
| } |
| }); |
| |
| mBtnToggleService = (ToggleButton) findViewById(R.id.toggleService); |
| |
| // set initial state |
| updateButtons(); |
| |
| mBtnToggleService.setOnCheckedChangeListener(new OnCheckedChangeListener() { |
| @Override |
| public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { |
| if (isChecked) { |
| bindToService(); |
| updateButtons(); |
| } else { |
| stopService(); |
| updateButtons(); |
| } |
| } |
| }); |
| |
| } |
| |
| private void updateButtons() { |
| boolean running = ControllerService.isServiceIsRunning(); |
| mBtnOpenMultitouch.setEnabled(running); |
| mBtnOpenSensors.setEnabled(running); |
| mBtnToggleService.setChecked(running); |
| } |
| |
| /** |
| * Unbind and then actually stops the service. |
| */ |
| private void stopService() { |
| Intent service = new Intent(this, ControllerService.class); |
| unbindFromService(); |
| if (DEBUG) Log.d(TAG, "stop service requested"); |
| stopService(service); |
| } |
| |
| private class MainControllerListener implements ControllerListener { |
| @Override |
| public void onErrorChanged() { |
| runOnUiThread(new Runnable() { |
| @Override |
| public void run() { |
| updateError(); |
| } |
| }); |
| } |
| |
| @Override |
| public void onStatusChanged() { |
| runOnUiThread(new Runnable() { |
| @Override |
| public void run() { |
| updateStatus(); |
| } |
| }); |
| } |
| } |
| |
| private void updateError() { |
| ControllerBinder binder = getServiceBinder(); |
| String error = binder == null ? "" : binder.getServiceError(); |
| if (error == null) { |
| error = ""; |
| } |
| |
| mTextError.setVisibility(error.length() == 0 ? View.GONE : View.VISIBLE); |
| mTextError.setText(error); |
| } |
| |
| private void updateStatus() { |
| ControllerBinder binder = getServiceBinder(); |
| boolean connected = binder == null ? false : binder.isEmuConnected(); |
| mTextStatus.setText( |
| getText(connected ? R.string.main_service_status_connected |
| : R.string.main_service_status_disconnected)); |
| |
| } |
| } |