• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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