MainActivity.java
Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2012 Google Inc.
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
00005  * use this file except in compliance with the License. You may obtain a copy of
00006  * the License at
00007  *
00008  * http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
00012  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
00013  * License for the specific language governing permissions and limitations under
00014  * the License.
00015  */
00016 
00017 package org.ros.android.android_tutorial_map_viewer;
00018 
00019 import com.google.common.base.Preconditions;
00020 import com.google.common.collect.Lists;
00021 
00022 import android.os.Bundle;
00023 import android.view.View;
00024 import android.view.Window;
00025 import android.view.WindowManager;
00026 import android.widget.Toast;
00027 import android.widget.ToggleButton;
00028 
00029 import org.ros.address.InetAddressFactory;
00030 import org.ros.android.RosActivity;
00031 import org.ros.android.view.visualization.VisualizationView;
00032 import org.ros.android.view.visualization.layer.CameraControlLayer;
00033 import org.ros.android.view.visualization.layer.CameraControlListener;
00034 import org.ros.android.view.visualization.layer.LaserScanLayer;
00035 import org.ros.android.view.visualization.layer.Layer;
00036 import org.ros.android.view.visualization.layer.OccupancyGridLayer;
00037 import org.ros.android.view.visualization.layer.RobotLayer;
00038 import org.ros.node.NodeConfiguration;
00039 import org.ros.node.NodeMainExecutor;
00040 import org.ros.time.NtpTimeProvider;
00041 
00042 import java.util.concurrent.TimeUnit;
00043 
00044 public class MainActivity extends RosActivity {
00045 
00046   private static final String MAP_FRAME = "map";
00047   private static final String ROBOT_FRAME = "base_link";
00048 
00049   private final SystemCommands systemCommands;
00050 
00051   private VisualizationView visualizationView;
00052   private ToggleButton followMeToggleButton;
00053   private CameraControlLayer cameraControlLayer;
00054 
00055   public MainActivity() {
00056     super("Map Viewer", "Map Viewer");
00057     systemCommands = new SystemCommands();
00058   }
00059 
00060   @Override
00061   public void onCreate(Bundle savedInstanceState) {
00062     super.onCreate(savedInstanceState);
00063     requestWindowFeature(Window.FEATURE_NO_TITLE);
00064     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
00065         WindowManager.LayoutParams.FLAG_FULLSCREEN);
00066     setContentView(R.layout.main);
00067     visualizationView = (VisualizationView) findViewById(R.id.visualization);
00068     cameraControlLayer = new CameraControlLayer();
00069     visualizationView.onCreate(Lists.<Layer>newArrayList(cameraControlLayer,
00070         new OccupancyGridLayer("map"), new LaserScanLayer("scan"), new RobotLayer(ROBOT_FRAME)));
00071     followMeToggleButton = (ToggleButton) findViewById(R.id.follow_me_toggle_button);
00072     enableFollowMe();
00073   }
00074 
00075   @Override
00076   protected void init(NodeMainExecutor nodeMainExecutor) {
00077     visualizationView.init(nodeMainExecutor);
00078     cameraControlLayer.addListener(new CameraControlListener() {
00079       @Override
00080       public void onZoom(float focusX, float focusY, float factor) {
00081         disableFollowMe();
00082       }
00083 
00084       @Override
00085       public void onTranslate(float distanceX, float distanceY) {
00086         disableFollowMe();
00087       }
00088 
00089       @Override
00090       public void onRotate(float focusX, float focusY, double deltaAngle) {
00091         disableFollowMe();
00092       }
00093 
00094       @Override
00095       public void onDoubleTap(float x, float y) {
00096       }
00097     });
00098     NodeConfiguration nodeConfiguration =
00099         NodeConfiguration.newPublic(InetAddressFactory.newNonLoopback().getHostAddress(),
00100             getMasterUri());
00101     NtpTimeProvider ntpTimeProvider =
00102         new NtpTimeProvider(InetAddressFactory.newFromHostString("192.168.0.1"),
00103             nodeMainExecutor.getScheduledExecutorService());
00104     ntpTimeProvider.startPeriodicUpdates(1, TimeUnit.MINUTES);
00105     nodeConfiguration.setTimeProvider(ntpTimeProvider);
00106     nodeMainExecutor.execute(visualizationView, nodeConfiguration);
00107     nodeMainExecutor.execute(systemCommands, nodeConfiguration);
00108   }
00109 
00110   public void onClearMapButtonClicked(View view) {
00111     toast("Clearing map...");
00112     systemCommands.reset();
00113     enableFollowMe();
00114   }
00115 
00116   public void onSaveMapButtonClicked(View view) {
00117     toast("Saving map...");
00118     systemCommands.saveGeotiff();
00119   }
00120 
00121   private void toast(final String text) {
00122     runOnUiThread(new Runnable() {
00123       @Override
00124       public void run() {
00125         Toast toast = Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT);
00126         toast.show();
00127       }
00128     });
00129   }
00130 
00131   public void onFollowMeToggleButtonClicked(View view) {
00132     boolean on = ((ToggleButton) view).isChecked();
00133     if (on) {
00134       enableFollowMe();
00135     } else {
00136       disableFollowMe();
00137     }
00138   }
00139 
00140   private void enableFollowMe() {
00141     Preconditions.checkNotNull(visualizationView);
00142     Preconditions.checkNotNull(followMeToggleButton);
00143     runOnUiThread(new Runnable() {
00144       @Override
00145       public void run() {
00146         visualizationView.getCamera().jumpToFrame(ROBOT_FRAME);
00147         followMeToggleButton.setChecked(true);
00148       }
00149     });
00150   }
00151 
00152   private void disableFollowMe() {
00153     Preconditions.checkNotNull(visualizationView);
00154     Preconditions.checkNotNull(followMeToggleButton);
00155     runOnUiThread(new Runnable() {
00156       @Override
00157       public void run() {
00158         visualizationView.getCamera().setFrame(MAP_FRAME);
00159         followMeToggleButton.setChecked(false);
00160       }
00161     });
00162   }
00163 }


android_core
Author(s): Damon Kohler
autogenerated on Thu Jun 6 2019 21:20:07