blob: 4fe8f8e207b175eaba1479bd0c4ebc68733f0151 [file] [log] [blame]
/*
* Copyright (C) 2015 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.example.android.rs.vr;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.AsyncTask;
import android.os.Bundle;
import android.renderscript.RenderScript;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.PopupMenu;
import android.widget.TextView;
import android.widget.ToggleButton;
import java.io.File;
import rsexample.google.com.vrdemo.R;
import com.example.android.rs.vr.engine.Volume;
import com.example.android.rs.vr.engine.VrState;
import com.example.android.rs.vr.loaders.VolumeLoader;
/**
* basic activity loads the volume and sets it on the VrView
*/
public class VrActivity extends Activity {
private static final String LOGTAG = "VrActivity";
VrState mState = new VrState();
VrView mVrView;
VolumeLoader mLoader;
private RenderScript mRs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vr);
mVrView = (VrView) findViewById(R.id.view);
mRs = RenderScript.create(VrActivity.this);
String dir = "/sdcard/Download/volumes";
mLoader = new VolumeLoader(dir);
VrSetupTask setup = new VrSetupTask();
String [] names = mLoader.getNames();
setup.execute(names[0]);
TextView tv = (TextView) findViewById(R.id.title);
tv.setText(names[0]);
}
class VrSetupTask extends AsyncTask<String, Integer, Volume> {
ProgressDialog progressDialog;
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(VrActivity.this);
progressDialog.setMessage( "Loading Volume");
progressDialog.setIndeterminate(true);
progressDialog.setCancelable(false);
progressDialog.setProgress(0);
progressDialog.setMax(100);
progressDialog.show();
mLoader.setProgressListener(new VolumeLoader.ProgressListener() {
@Override
public void progress(int n, int total) {
publishProgress(n, total);
}
});
}
@Override
protected Volume doInBackground(String... names) {
return mLoader.getVolume(mRs, names[0]);
}
@Override
protected void onProgressUpdate(Integer... progress) {
progressDialog.setMessage("load "+progress[0]+"/"+progress[1]);
progressDialog.setMax(progress[1]);
progressDialog.setProgress(progress[0]);
Log.v(LOGTAG,"Loading "+ progress[0]+"/"+progress[1]);
}
protected void onPostExecute(Volume v) {
Log.v(LOGTAG,"done");
mVrView.setVolume(mRs, v);
progressDialog.dismiss();
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
}
public void cutXClick(View v) {
mVrView.setMode(VrView.CUT_X_MODE);
uncheckOthers(v);
}
public void cutYClick(View v) {
mVrView.setMode(VrView.CUT_Y_MODE);
uncheckOthers(v);
}
public void cutZClick(View v) {
mVrView.setMode(VrView.CUT_Z_MODE);
uncheckOthers(v);
}
public void rotateClick(View v) {
mVrView.setMode(VrView.ROTATE_MODE);
uncheckOthers(v);
}
public void resetClick(View v) {
mVrView.resetCut();
}
public void saveClick(View v) {
// TODO should save and Image
}
public void looksClick(View v) {
String[] looks = mVrView.getLooks();
PopupMenu popup = new PopupMenu(this, v);
Menu menu = popup.getMenu();
for (int i = 0; i < looks.length; i++) {
menu.add(0, Menu.FIRST + i, Menu.NONE, looks[i]);
}
//registering popup with OnMenuItemClickListener
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
mVrView.setLook(item.getTitle().toString());
return true;
}
});
popup.show();
uncheckOthers(v);
}
public void dataClick(View v) {
Log.v(LOGTAG, "dataClick");
String[] volumes = mLoader.getNames();
PopupMenu popup = new PopupMenu(this, v);
Menu menu = popup.getMenu();
for (int i = 0; i < volumes.length; i++) {
menu.add(0, Menu.FIRST + i, Menu.NONE, volumes[i]);
}
//registering popup with OnMenuItemClickListener
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
VrSetupTask setup = new VrSetupTask();
String title = item.getTitle().toString();
TextView tv = (TextView) findViewById(R.id.title);
tv.setText(title);
setup.execute(title);
return true;
}
});
popup.show();
uncheckOthers(v);
}
private void uncheckOthers(View v) {
ViewGroup p = (ViewGroup) v.getParent().getParent();
uncheckOthers(p, v);
}
private void uncheckOthers(ViewGroup p, View v) {
int n = p.getChildCount();
for (int i = 0; i < n; i++) {
final View child = p.getChildAt(i);
if (child instanceof ViewGroup) {
uncheckOthers((ViewGroup) child, v);
}
if (v != child && child instanceof ToggleButton) {
ToggleButton t = (ToggleButton) child;
t.setChecked(false);
}
}
}
}