blob: 47692454cc07d0d322df73fd054cc9d35bd430d2 [file] [log] [blame]
/*
* 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));
}
}