package com.camnter.newlife.ui.activity.classloader;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import butterknife.BindView;
import butterknife.ButterKnife;
import com.camnter.newlife.R;
import com.camnter.newlife.core.activity.BaseAppCompatActivity;
import com.camnter.stackblur.NativeBlurProcess;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* Description:ExternalLoadSoActivity
* Created by:CaMnter
*/
public class ExternalLoadSoActivity extends BaseAppCompatActivity implements View.OnClickListener {
@BindView(R.id.external_load_so_image) ImageView externalLoadSoImage;
@BindView(R.id.external_load_so_button) Button externalLoadSoButton;
/**
* Fill in layout id
*
* @return layout id
*/
@Override protected int getLayoutId() {
return R.layout.activity_external_load_so;
}
/**
* Initialize the view in the layout
*
* @param savedInstanceState savedInstanceState
*/
@SuppressLint("UnsafeDynamicallyLoadedCode")
@Override
protected void initViews(Bundle savedInstanceState) {
ButterKnife.bind(this);
File dir = this.getDir("jniLibs", Activity.MODE_PRIVATE);
File distFile = new File(dir.getAbsolutePath() + File.separator + "libstackblur.so");
if (copyFileFromAssets(getApplicationContext(), "libstackblur.so",
distFile.getAbsolutePath())) {
//使用load方法加载内部储存的SO库
System.load(distFile.getAbsolutePath());
NativeBlurProcess.isLoadLibraryOk.set(true);
}
}
public void onDoBlur() {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.img_mm_1);
Bitmap blur = NativeBlurProcess.blur(bitmap, 20, false);
externalLoadSoImage.setImageBitmap(blur);
}
public static boolean copyFileFromAssets(Context context, String fileName, String path) {
boolean copyIsFinish = false;
try {
InputStream is = context.getAssets().open(fileName);
File file = new File(path);
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
byte[] temp = new byte[1024];
int i = 0;
while ((i = is.read(temp)) > 0) {
fos.write(temp, 0, i);
}
fos.close();
is.close();
copyIsFinish = true;
} catch (IOException e) {
e.printStackTrace();
Log.e("ExternalLoadSoActivity", "[copyFileFromAssets] IOException " + e.toString());
}
return copyIsFinish;
}
/**
* Initialize the View of the listener
*/
@Override protected void initListeners() {
this.externalLoadSoButton.setOnClickListener(this);
}
/**
* Initialize the Activity data
*/
@Override protected void initData() {
}
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
@Override public void onClick(View v) {
switch (v.getId()) {
case R.id.external_load_so_button:
this.onDoBlur();
break;
}
}
}