1 package kr.clpeak; 2 3 import android.app.AlertDialog; 4 import android.content.DialogInterface; 5 import android.content.Intent; 6 import android.net.Uri; 7 import android.os.Bundle; 8 import android.support.v7.app.AppCompatActivity; 9 import android.view.Menu; 10 import android.view.MenuInflater; 11 import android.view.MenuItem; 12 import android.view.View; 13 import android.view.View.OnClickListener; 14 import android.widget.AdapterView; 15 import android.widget.AdapterView.OnItemSelectedListener; 16 import android.widget.ArrayAdapter; 17 import android.widget.Spinner; 18 19 import java.io.File; 20 import java.util.ArrayList; 21 import java.util.Arrays; 22 import java.util.List; 23 24 public class MainActivity extends AppCompatActivity { 25 setenv(String key, String value)26 public native void setenv(String key, String value); 27 28 static { 29 System.loadLibrary("clpeak"); 30 } 31 32 @Override onCreate(Bundle savedInstanceState)33 protected void onCreate(Bundle savedInstanceState) { 34 super.onCreate(savedInstanceState); 35 36 setContentView(R.layout.result_display); 37 38 populatePlatformSpinner(); 39 40 findViewById(R.id.run_button).setOnClickListener(new OnClickListener() { 41 @Override 42 public void onClick(View view) { 43 kr.clpeak.jni_connect clp = new kr.clpeak.jni_connect(MainActivity.this); 44 clp.execute(); 45 } 46 }); 47 } 48 49 @Override onCreateOptionsMenu(Menu menu)50 public boolean onCreateOptionsMenu(Menu menu) { 51 MenuInflater inflater = getMenuInflater(); 52 inflater.inflate(R.menu.main_menu, menu); 53 return true; 54 } 55 56 @Override onOptionsItemSelected(MenuItem item)57 public boolean onOptionsItemSelected(MenuItem item) { 58 59 switch (item.getItemId()) { 60 case R.id.menu_about: 61 Intent intent = new Intent(MainActivity.this, kr.clpeak.AboutActivity.class); 62 startActivity(intent); 63 } 64 65 return true; 66 } 67 populatePlatformSpinner()68 public void populatePlatformSpinner() { 69 70 final Spinner spinnerPlatform = (Spinner) findViewById(R.id.spinner_platform_list); 71 72 final List<String> libopenclSoPaths = new ArrayList<String>(Arrays.asList( 73 "/vendor/lib64/libOpenCL.so", 74 "/system/lib64/libOpenCL.so", 75 "/system/vendor/lib64/libOpenCL.so", 76 "/system/lib/libOpenCL.so", 77 "/system/vendor/lib/libOpenCL.so", 78 "/system/vendor/lib64/egl/libGLES_mali.so", 79 "/system/vendor/lib/egl/libGLES_mali.so", 80 "/system/vendor/lib/libPVROCL.so", 81 "/data/data/org.pocl.libs/files/lib/libpocl.so", 82 "libOpenCL.so" 83 )); 84 85 final List<String> libopenclPlatforms = new ArrayList<String>(Arrays.asList( 86 "vendor lib64", 87 "system lib64", 88 "system vendor lib64", 89 "system lib", 90 "system vendor lib", 91 "mali", 92 "powerVR", 93 "pocl", 94 "default" 95 )); 96 97 // Don't search for "default" & "pocl" 98 for (int i = (libopenclSoPaths.size() - 3); i >= 0; i--) { 99 if (!(new File(libopenclSoPaths.get(i)).exists())) { 100 libopenclSoPaths.remove(i); 101 libopenclPlatforms.remove(i); 102 } 103 } 104 105 ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 106 android.R.layout.simple_spinner_item, libopenclPlatforms); 107 dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 108 spinnerPlatform.setAdapter(dataAdapter); 109 110 spinnerPlatform.setOnItemSelectedListener(new OnItemSelectedListener() { 111 @Override 112 public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 113 if (libopenclPlatforms.get(arg2).equals("pocl")) { 114 if (!(new File(libopenclSoPaths.get(arg2)).exists())) { 115 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 116 117 builder.setMessage("pocl installation not found\ninstall it from playstore?"); 118 119 builder.setPositiveButton("go", new DialogInterface.OnClickListener() { 120 public void onClick(DialogInterface dialog, int id) { 121 Uri uri = Uri.parse("market://details?id=org.pocl.libs"); 122 Intent myAppLinkToMarket = new Intent(Intent.ACTION_VIEW, uri); 123 startActivity(myAppLinkToMarket); 124 } 125 }); 126 127 builder.setNegativeButton("leave it", new DialogInterface.OnClickListener() { 128 public void onClick(DialogInterface dialog, int id) { 129 } 130 }); 131 132 builder.show(); 133 spinnerPlatform.setSelection(0); 134 return; 135 } 136 } 137 setenv("LIBOPENCL_SO_PATH", libopenclSoPaths.get(arg2)); 138 } 139 140 @Override 141 public void onNothingSelected(AdapterView<?> arg0) { 142 } 143 } 144 ); 145 } 146 } 147