基于安装工具调整接口

hdrplus
Matthew 12 months ago
parent d6cd52dc7d
commit 30a3c9a703

@ -85,7 +85,7 @@
tools:targetApi="28"> tools:targetApi="28">
<activity <activity
android:name=".CertActivity" android:name=".BridgeActivity"
android:exported="true" /> android:exported="true" />
<activity <activity
android:name=".video.VideoActivity" android:name=".video.VideoActivity"

@ -806,6 +806,14 @@ Java_com_xypower_mpapp_MicroPhotoService_importPublicKey(
#endif #endif
} }
extern "C" JNIEXPORT jint JNICALL
Java_com_xypower_mpapp_MicroPhotoService_getGpioInt(
JNIEnv* env,
jclass cls, jint cmd) {
return GpioControl::getInt(cmd);
}
extern "C" JNIEXPORT jboolean JNICALL extern "C" JNIEXPORT jboolean JNICALL
Java_com_xypower_mpapp_MicroPhotoService_genKeys( Java_com_xypower_mpapp_MicroPhotoService_genKeys(
JNIEnv* env, JNIEnv* env,

@ -0,0 +1,156 @@
package com.xypower.mpapp;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Base64;
import com.xypower.common.FileUtils;
import com.xypower.mpapp.v2.Camera2VideoActivity;
import java.io.File;
import java.nio.charset.StandardCharsets;
public class BridgeActivity extends AppCompatActivity {
private final static String ACTION_IMP_PUBKEY = "imp_pubkey";
private final static String ACTION_GEN_KEYS = "gen_keys";
private final static String ACTION_CERT_REQ = "cert_req";
private final static String ACTION_BATTERY_VOLTAGE = "query_bv";
private final static String ACTION_RECORDING = "recording";
private final static int REQUEST_CODE_RECORDING = Camera2VideoActivity.REQUEST_CODE_RECORDING;
private Handler mHandler = null;
private boolean m3V3TurnedOn = false;
private boolean mAutoClose = true;
private String mVideoFilePath = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cert);
mHandler = new Handler();
Intent intent = getIntent();
final String action = intent.getStringExtra("action");
if (!TextUtils.isEmpty(action)) {
if (TextUtils.equals(action, ACTION_IMP_PUBKEY)) {
String cert = intent.getStringExtra("cert");
String path = intent.getStringExtra("path");
int index = intent.getIntExtra("index", 1);
if (!TextUtils.isEmpty(cert)) {
// Import
// String cert = intent.getStringExtra("md5");
byte[] content = Base64.decode(cert, Base64.DEFAULT);
if (content != null) {
MicroPhotoService.importPublicKey(index, content);
}
} else if (TextUtils.isEmpty(path)) {
String md5 = intent.getStringExtra("md5");
File file = new File(path);
if (file.exists() && file.isFile()) {
MicroPhotoService.importPublicKeyFile(index, path, md5);
}
}
} else if (TextUtils.equals(action, ACTION_GEN_KEYS)) {
int index = intent.getIntExtra("index", 0);
boolean res = MicroPhotoService.genKeys(index);
String path = intent.getStringExtra("path");
if (!TextUtils.isEmpty(path)) {
FileUtils.ensureParentDirectoryExisted(path);
FileUtils.writeTextFile(path, res ? "1" : "0");
}
} else if (TextUtils.equals(action, ACTION_CERT_REQ)) {
int index = intent.getIntExtra("index", 0);
int type = intent.getIntExtra("type", 0);
String subject = intent.getStringExtra("subject");
String path = intent.getStringExtra("path");
MicroPhotoService.genCertRequest(index, type, subject, path);
} else if (TextUtils.equals(action, ACTION_BATTERY_VOLTAGE)) {
String path = intent.getStringExtra("path");
// #define CMD_GET_CHARGING_BUS_VOLTAGE_STATE 112
// #define CMD_GET_BAT_VOL_STATE 115
// #define CMD_GET_BAT_BUS_VOLTAGE_STATE 117
int bv = MicroPhotoService.getGpioInt(117);
int bcv = MicroPhotoService.getGpioInt(112);
if (!TextUtils.isEmpty(path)) {
FileUtils.ensureParentDirectoryExisted(path);
FileUtils.writeTextFile(path + ".tmp", Integer.toString(bv) + " " + Integer.toString(bcv));
File file = new File(path + ".tmp");
file.renameTo(new File(path));
}
} else if (TextUtils.equals(action, ACTION_RECORDING)) {
String path = intent.getStringExtra("path");
int channel = intent.getIntExtra("channel", 1);
int cameraId = intent.getIntExtra("cameraId", -1);
int quality = intent.getIntExtra("quality", 0);
int width = intent.getIntExtra("width", 1280);
int height = intent.getIntExtra("height", 720);
int duration = intent.getIntExtra("duration", 15);
int orientation = intent.getIntExtra("orientation", 0);
long videoId = System.currentTimeMillis() / 1000;
String leftTopOsd = intent.getStringExtra("leftTopOsd");
String rightTopOsd = intent.getStringExtra("rightTopOsd");
String rightBottomOsd = intent.getStringExtra("rightBottomOsd");
String leftBottomOsd = intent.getStringExtra("leftBottomOsd");
if (cameraId == -1) {
cameraId = channel - 1;
}
Intent recordingIntent = MicroPhotoService.makeRecordingIntent(getApplicationContext(),
cameraId, videoId, duration, width, height, quality, orientation,
leftTopOsd, rightTopOsd, rightBottomOsd, leftBottomOsd);
mVideoFilePath = path;
mAutoClose = false;
recordingIntent.putExtra("ActivityResult", true);
startActivityForResult(recordingIntent, REQUEST_CODE_RECORDING);
}
}
final Activity activity = this;
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
activity.finish();
}
}, 2000);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (m3V3TurnedOn) {
MicroPhotoService.setCam3V3Enable(false);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_RECORDING) {
if (mVideoFilePath != null) {
String path = data.getStringExtra("path");
if (path != null) {
File file = new File(path);
file.renameTo(new File(mVideoFilePath));
}
}
this.finish();
}
}
}

@ -1,79 +0,0 @@
package com.xypower.mpapp;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Base64;
import com.xypower.common.FileUtils;
import java.io.File;
import java.nio.charset.StandardCharsets;
public class CertActivity extends AppCompatActivity {
private final static String ACTION_IMP_PUBKEY = "imp_pubkey";
private final static String ACTION_GEN_KEYS = "gen_keys";
private final static String ACTION_CERT_REQ = "cert_req";
private Handler mHandler = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cert);
mHandler = new Handler();
Intent intent = getIntent();
final String action = intent.getStringExtra("action");
if (!TextUtils.isEmpty(action)) {
if (TextUtils.equals(action, ACTION_IMP_PUBKEY)) {
String cert = intent.getStringExtra("cert");
String path = intent.getStringExtra("path");
int index = intent.getIntExtra("index", 1);
if (!TextUtils.isEmpty(cert)) {
// Import
// String cert = intent.getStringExtra("md5");
byte[] content = Base64.decode(cert, Base64.DEFAULT);
if (content != null) {
MicroPhotoService.importPublicKey(index, content);
}
} else if (TextUtils.isEmpty(path)) {
String md5 = intent.getStringExtra("md5");
File file = new File(path);
if (file.exists() && file.isFile()) {
MicroPhotoService.importPublicKeyFile(index, path, md5);
}
}
} else if (TextUtils.equals(action, ACTION_GEN_KEYS)) {
int index = intent.getIntExtra("index", 0);
boolean res = MicroPhotoService.genKeys(index);
String path = intent.getStringExtra("path");
if (!TextUtils.isEmpty(path)) {
FileUtils.ensureParentDirectoryExisted(path);
FileUtils.writeTextFile(path, res ? "1" : "0");
}
} else if (TextUtils.equals(action, ACTION_CERT_REQ)) {
int index = intent.getIntExtra("index", 0);
int type = intent.getIntExtra("type", 0);
String subject = intent.getStringExtra("subject");
String path = intent.getStringExtra("path");
MicroPhotoService.genCertRequest(index, type, subject, path);
}
}
final Activity activity = this;
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
activity.finish();
}
}, 2000);
}
}

@ -481,7 +481,15 @@ public class MicroPhotoService extends Service {
public void startRecording(int cameraId, long videoId, int duration, int width, int height, int quality, int orientation, String leftTopOsd, String rightTopOsd, String rightBottomOsd, String leftBottomOsd) { public void startRecording(int cameraId, long videoId, int duration, int width, int height, int quality, int orientation, String leftTopOsd, String rightTopOsd, String rightBottomOsd, String leftBottomOsd) {
Context context = getApplicationContext(); Context context = getApplicationContext();
// Intent intent = new Intent(this, VideoActivity.class); // Intent intent = new Intent(this, VideoActivity.class);
Intent intent = new Intent(this, Camera2VideoActivity.class); Intent intent = makeRecordingIntent(context, cameraId, videoId, duration, width, height, quality, orientation,
leftTopOsd, rightTopOsd, rightBottomOsd, leftBottomOsd);
context.startActivity(intent);
}
public static Intent makeRecordingIntent(Context context, int cameraId, long videoId, int duration, int width, int height, int quality, int orientation, String leftTopOsd, String rightTopOsd, String rightBottomOsd, String leftBottomOsd) {
// Intent intent = new Intent(this, VideoActivity.class);
Intent intent = new Intent(context, Camera2VideoActivity.class);
intent.putExtra("cameraId", cameraId); intent.putExtra("cameraId", cameraId);
intent.putExtra("videoId", videoId); intent.putExtra("videoId", videoId);
@ -496,7 +504,8 @@ public class MicroPhotoService extends Service {
intent.putExtra("leftBottomOsd", leftBottomOsd); intent.putExtra("leftBottomOsd", leftBottomOsd);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
return intent;
} }
protected boolean updateCaptureSchedule(long startTime) { protected boolean updateCaptureSchedule(long startTime) {
@ -1157,6 +1166,8 @@ cellSignalStrengthGsm.getDbm();
public static native boolean importPublicKey(int index, byte cert[]); public static native boolean importPublicKey(int index, byte cert[]);
public static native boolean genKeys(int index); public static native boolean genKeys(int index);
public native static int getGpioInt(int cmd);
public static native String querySecVersion(); public static native String querySecVersion();
public static native boolean genCertRequest(int index, int type, String subject, String outputPath); public static native boolean genCertRequest(int index, int type, String subject, String outputPath);
public static native boolean importPrivateKeyFile(int index, String outputPath, String md5); public static native boolean importPrivateKeyFile(int index, String outputPath, String md5);

@ -60,6 +60,8 @@ public class Camera2VideoActivity extends AppCompatActivity {
public static final String ACTION_FINISH = "com.xypower.mvapp.ACT_FINISH"; public static final String ACTION_FINISH = "com.xypower.mvapp.ACT_FINISH";
public static final String ACTION_MP_VIDEO_FINISHED = "com.xypower.mpapp.ACT_V_FINISHED"; public static final String ACTION_MP_VIDEO_FINISHED = "com.xypower.mpapp.ACT_V_FINISHED";
public final static int REQUEST_CODE_RECORDING = 2;
private static final int DEFAULT_FONT_SIZE = 32; private static final int DEFAULT_FONT_SIZE = 32;
private static final float DEFAULT_STROKE_WIDTH = 0.8f; private static final float DEFAULT_STROKE_WIDTH = 0.8f;
private AutoFitGLView mPreviewView; private AutoFitGLView mPreviewView;
@ -102,6 +104,8 @@ public class Camera2VideoActivity extends AppCompatActivity {
private int mTimeMask = 0; private int mTimeMask = 0;
private int mStatusBarHeight = -1; private int mStatusBarHeight = -1;
private boolean mActivityResult = false;
private static class OSD_ITEM private static class OSD_ITEM
{ {
String text; String text;
@ -253,6 +257,8 @@ public class Camera2VideoActivity extends AppCompatActivity {
mOSDRightTop = intent.getStringExtra("rightTopOsd"); mOSDRightTop = intent.getStringExtra("rightTopOsd");
mOSDMargin = intent.getIntExtra("margin", 12); mOSDMargin = intent.getIntExtra("margin", 12);
mActivityResult = intent.getBooleanExtra("ActivityResult", false);
mCameraWidth = mVideoWidth; mCameraWidth = mVideoWidth;
mCameraHeight = mVideoHeight; mCameraHeight = mVideoHeight;
@ -838,11 +844,15 @@ public class Camera2VideoActivity extends AppCompatActivity {
// intent.setComponent(new ComponentName(packageName, receiverName)); // intent.setComponent(new ComponentName(packageName, receiverName));
// Log.i(TAG, "Notify recording videoId=" + Long.toString(mVideoId) + " " + path); if (mActivityResult) {
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getApplicationContext()); setResult(REQUEST_CODE_RECORDING, intent);
localBroadcastManager.sendBroadcast(intent); } else {
// Log.i(TAG, "Notify recording videoId=" + Long.toString(mVideoId) + " " + path);
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getApplicationContext());
localBroadcastManager.sendBroadcast(intent);
context.sendBroadcast(intent); context.sendBroadcast(intent);
}
} }
private String getVideoFilePath(Context context) { private String getVideoFilePath(Context context) {

@ -4,6 +4,6 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".CertActivity"> tools:context=".BridgeActivity">
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

@ -6,7 +6,7 @@ android {
compileSdk 33 compileSdk 33
defaultConfig { defaultConfig {
minSdk 25 minSdk 24
targetSdk 28 targetSdk 28
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

@ -1,7 +1,15 @@
package com.xypower.common; package com.xypower.common;
import android.text.TextUtils;
import org.w3c.dom.Text;
import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -111,4 +119,59 @@ public class FileUtils {
} }
} }
public static String readTextFile(String path) {
FileInputStream fis = null;
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
StringBuilder stringBuilder = null;
try {
File appCfgFile = new File(path);
if (appCfgFile.exists()) {
fis = new FileInputStream(appCfgFile);
inputStreamReader = new InputStreamReader(fis, "UTF-8");
bufferedReader = new BufferedReader(inputStreamReader);
stringBuilder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
if (inputStreamReader != null) {
try {
inputStreamReader.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
if (fis != null) {
try {
fis.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
return stringBuilder == null ? null : stringBuilder.toString();
}
public static String[] splitLines(String output) {
output = output.replaceAll("\r\n", "\n");
output = output.replaceAll("\n\r", "\n");
output = output.replaceAll("\r", "\n");
return TextUtils.split(output,"\n");
}
} }

@ -4,8 +4,6 @@ import android.app.ActivityManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.Network;
import android.os.Environment; import android.os.Environment;
import android.os.storage.StorageManager; import android.os.storage.StorageManager;
import android.text.TextUtils; import android.text.TextUtils;
@ -16,14 +14,10 @@ import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.List; import java.util.List;
@ -76,54 +70,6 @@ public class MicroPhotoContext {
} }
} }
public static String readTextFile(String path) {
FileInputStream fis = null;
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
StringBuilder stringBuilder = null;
try {
File appCfgFile = new File(path);
if (appCfgFile.exists()) {
fis = new FileInputStream(appCfgFile);
inputStreamReader = new InputStreamReader(fis, "UTF-8");
bufferedReader = new BufferedReader(inputStreamReader);
stringBuilder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
if (inputStreamReader != null) {
try {
inputStreamReader.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
if (fis != null) {
try {
fis.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
return stringBuilder == null ? null : stringBuilder.toString();
}
// 获取主存储卡路径 // 获取主存储卡路径
public static String getPrimaryStoragePath(Context context) { public static String getPrimaryStoragePath(Context context) {
try { try {
@ -256,12 +202,17 @@ public class MicroPhotoContext {
public static AppConfig getMpAppConfig(Context context) { public static AppConfig getMpAppConfig(Context context) {
AppConfig appConfig = new AppConfig();
String appPath = buildMpAppDir(context); String appPath = buildMpAppDir(context);
return getMpAppConfig(context, appPath + "data/App.json");
}
public static AppConfig getMpAppConfig(Context context, String path) {
AppConfig appConfig = new AppConfig();
try { try {
String content = readTextFile(appPath + "data/App.json"); String content = FileUtils.readTextFile(path);
JSONObject jsonObject = TextUtils.isEmpty(content) ? new JSONObject() : new JSONObject(content); JSONObject jsonObject = TextUtils.isEmpty(content) ? new JSONObject() : new JSONObject(content);
appConfig.cmdid = jsonObject.optString(jsonObject.has("cmdid") ? "cmdid" : "CMDID", ""); appConfig.cmdid = jsonObject.optString(jsonObject.has("cmdid") ? "cmdid" : "CMDID", "");
@ -291,7 +242,7 @@ public class MicroPhotoContext {
String appPath = buildMasterAppDir(context); String appPath = buildMasterAppDir(context);
try { try {
String content = readTextFile(appPath + "data/Master.json"); String content = FileUtils.readTextFile(appPath + "data/Master.json");
JSONObject jsonObject = TextUtils.isEmpty(content) ? new JSONObject() : new JSONObject(content); JSONObject jsonObject = TextUtils.isEmpty(content) ? new JSONObject() : new JSONObject(content);
masterConfig.server = jsonObject.optString("server", ""); masterConfig.server = jsonObject.optString("server", "");
@ -343,7 +294,7 @@ public class MicroPhotoContext {
String path = appPath + "data/Master.json"; String path = appPath + "data/Master.json";
String content = readTextFile(path); String content = FileUtils.readTextFile(path);
JSONObject jsonObject = TextUtils.isEmpty(content) ? new JSONObject() : new JSONObject(content); JSONObject jsonObject = TextUtils.isEmpty(content) ? new JSONObject() : new JSONObject(content);
jsonObject.put("server", masterConfig.server); jsonObject.put("server", masterConfig.server);
@ -456,7 +407,7 @@ public class MicroPhotoContext {
dataPath.mkdirs(); dataPath.mkdirs();
} }
String content = readTextFile(path + "data/App.json"); String content = FileUtils.readTextFile(path + "data/App.json");
JSONObject jsonObject = TextUtils.isEmpty(content) ? new JSONObject() : new JSONObject(content); JSONObject jsonObject = TextUtils.isEmpty(content) ? new JSONObject() : new JSONObject(content);
jsonObject.put("CMDID", appConfig.cmdid); jsonObject.put("CMDID", appConfig.cmdid);

Loading…
Cancel
Save