/*
* Copyright (C) 2014 BeyondAR
*
* 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.beyondar.example;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.beyondar.android.fragment.BeyondarFragmentSupport;
import com.beyondar.android.view.BeyondarViewAdapter;
import com.beyondar.android.view.OnClickBeyondarObjectListener;
import com.beyondar.android.world.BeyondarObject;
import com.beyondar.android.world.World;
public class AttachViewToGeoObjectActivity extends FragmentActivity implements OnClickBeyondarObjectListener,
OnClickListener {
private BeyondarFragmentSupport mBeyondarFragment;
private World mWorld;
private List<BeyondarObject> showViewOn;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
showViewOn = Collections.synchronizedList(new ArrayList<BeyondarObject>());
// Hide the window title.
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.simple_camera);
mBeyondarFragment = (BeyondarFragmentSupport) getSupportFragmentManager().findFragmentById(
R.id.beyondarFragment);
// We create the world and fill it ...
mWorld = CustomWorldHelper.generateObjects(this);
// .. and send it to the fragment
mBeyondarFragment.setWorld(mWorld);
// We also can see the Frames per seconds
mBeyondarFragment.showFPS(true);
mBeyondarFragment.setOnClickBeyondarObjectListener(this);
CustomBeyondarViewAdapter customBeyondarViewAdapter = new CustomBeyondarViewAdapter(this);
mBeyondarFragment.setBeyondarViewAdapter(customBeyondarViewAdapter);
Toast.makeText(this, "Click on any object to attach it a view", Toast.LENGTH_LONG).show();
}
@Override
public void onClick(View v) {
Toast.makeText(this, "Click", Toast.LENGTH_SHORT).show();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
@Override
public void onClickBeyondarObject(ArrayList<BeyondarObject> beyondarObjects) {
if (beyondarObjects.size() == 0) {
return;
}
BeyondarObject beyondarObject = beyondarObjects.get(0);
if (showViewOn.contains(beyondarObject)) {
showViewOn.remove(beyondarObject);
} else {
showViewOn.add(beyondarObject);
}
}
private class CustomBeyondarViewAdapter extends BeyondarViewAdapter {
LayoutInflater inflater;
public CustomBeyondarViewAdapter(Context context) {
super(context);
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(BeyondarObject beyondarObject, View recycledView, ViewGroup parent) {
if (!showViewOn.contains(beyondarObject)) {
return null;
}
if (recycledView == null) {
recycledView = inflater.inflate(R.layout.beyondar_object_view, null);
}
TextView textView = (TextView) recycledView.findViewById(R.id.titleTextView);
textView.setText(beyondarObject.getName());
Button button = (Button) recycledView.findViewById(R.id.button);
button.setOnClickListener(AttachViewToGeoObjectActivity.this);
// Once the view is ready we specify the position
setPosition(beyondarObject.getScreenPositionTopRight());
return recycledView;
}
}
}