Skip to content

Commit 5ad83c1

Browse files
MiSpeed expand Thermal
1 parent 1b3b3e3 commit 5ad83c1

File tree

5 files changed

+197
-0
lines changed

5 files changed

+197
-0
lines changed

MiBridge.jar

2.07 KB
Binary file not shown.

TestMiBridge/app/libs/MiBridge.jar

2.07 KB
Binary file not shown.

TestMiBridge/app/src/main/java/com/mi/testmibridge/ApiActivity.java

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,23 @@
77
import android.support.v7.widget.LinearLayoutManager;
88
import android.support.v7.widget.RecyclerView;
99
import android.text.TextUtils;
10+
import android.util.Log;
1011
import android.view.Window;
1112
import android.widget.EditText;
1213
import android.widget.TextView;
1314
import android.widget.Toast;
1415

1516
import com.bun.miitmdid.core.JLibrary;
1617
import com.mi.mibridge.MiBridge;
18+
import com.mi.mibridge.ThermalEventCallBack;
1719

1820
import java.util.ArrayList;
1921
import java.util.List;
2022

2123
public class ApiActivity extends AppCompatActivity {
2224

25+
private static final String TAG = "TestMiBridge";
26+
2327
// 数据源
2428
private List<MiBridgeModel> miBridgeModels = new ArrayList<>();
2529

@@ -65,6 +69,15 @@ public class ApiActivity extends AppCompatActivity {
6569
// tid
6670
private int mBridgeTid;
6771

72+
// system state
73+
private static final int QUERY_BOARD_TEMP = 1;
74+
private static final int QUERY_POWER_MODE = 2;
75+
76+
// ThermalEventCallBack
77+
ThermalEventCallBack mThermalEventCallBack = null;
78+
Context mContext;
79+
80+
6881
private MiitHelper.AppIdsUpdater appIdsUpdater = new MiitHelper.AppIdsUpdater() {
6982
@Override
7083
public void OnIdsAvalid(@NonNull String ids) {
@@ -89,6 +102,7 @@ protected void onCreate(Bundle savedInstanceState) {
89102

90103
initData();
91104
initView();
105+
mContext = this;
92106
}
93107

94108
private void initView() {
@@ -239,6 +253,58 @@ public void run() {
239253
showResult(ret, "requestThreadPriority ");
240254
}
241255
}));
256+
257+
miBridgeModels.add(new MiBridgeModel("getSystemState -> boardTemp", new Runnable() {
258+
@Override
259+
public void run() {
260+
int ret = MiBridge.getSystemState(mBridgeUid, mContext, QUERY_BOARD_TEMP);
261+
Toast.makeText(ApiActivity.this, "getSystemState: " + ret, Toast.LENGTH_SHORT).show();
262+
}
263+
}));
264+
265+
miBridgeModels.add(new MiBridgeModel("getSystemState -> powerMode", new Runnable() {
266+
@Override
267+
public void run() {
268+
int ret = MiBridge.getSystemState(mBridgeUid, mContext, QUERY_POWER_MODE);
269+
Toast.makeText(ApiActivity.this, "getSystemState: " + ret, Toast.LENGTH_SHORT).show();
270+
}
271+
}));
272+
273+
miBridgeModels.add(new MiBridgeModel("registerThermalEventCallback", new Runnable() {
274+
@Override
275+
public void run() {
276+
if(mThermalEventCallBack == null) {
277+
mThermalEventCallBack = new ThermalEventCallBack() {
278+
@Override
279+
public void onThermalLevelChanged(int level) {
280+
Log.e(TAG, "onThermalLevelChanged: " + level);
281+
//do somthing;
282+
}
283+
};
284+
int ret = MiBridge.registerThermalEventCallback(mBridgeUid, mThermalEventCallBack);
285+
Toast.makeText(ApiActivity.this, "registerThermalEventCallback: " + ret, Toast.LENGTH_SHORT).show();
286+
} else {
287+
Log.w(TAG, "You should unRegisterThermalEventCallback last one!");
288+
Toast.makeText(ApiActivity.this, "To unRegisterThermalEventCallback last one!!", Toast.LENGTH_SHORT).show();
289+
}
290+
}
291+
}));
292+
293+
miBridgeModels.add(new MiBridgeModel("unRegisterThermalEventCallback", new Runnable() {
294+
@Override
295+
public void run() {
296+
if(mThermalEventCallBack != null) {
297+
int ret = MiBridge.unRegisterThermalEventCallback(mBridgeUid, mThermalEventCallBack);
298+
Toast.makeText(ApiActivity.this, "unRegisterThermalEventCallback: " + ret, Toast.LENGTH_SHORT).show();
299+
mThermalEventCallBack = null;
300+
} else {
301+
Log.w(TAG, "You should registerThermalEventCallback first!");
302+
Toast.makeText(ApiActivity.this, "To registerThermalEventCallback first!", Toast.LENGTH_SHORT).show();
303+
}
304+
305+
}
306+
}));
307+
242308
}
243309

244310

TestMiBridge/mibridge/src/main/java/com/mi/mibridge/MiBridge.java

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import java.lang.reflect.Constructor;
77
import java.lang.reflect.Method;
8+
import java.lang.reflect.Proxy;
89

910
import dalvik.system.PathClassLoader;
1011

@@ -17,6 +18,7 @@ public class MiBridge {
1718
private static final String TAG = "MiBridge";
1819
private static final String PERFORMANCE_JAR = "/system/framework/MiuiBooster.jar";
1920
private static final String PERFORMANCE_CLASS = "com.miui.performance.MiuiBooster";
21+
private static final String ITHERMALEVENTCALLBACK_CLASS = "com.miui.performance.IThermalEventCallBack";
2022

2123
private static Method mCheckPermissionFunc = null;
2224
private static Method mCheckDebugPermissionFunc = null;
@@ -31,8 +33,13 @@ public class MiBridge {
3133
private static Method mCancelDdrHighFunc = null;
3234
private static Method mRequestBindCoreFunc = null;
3335
private static Method mCancelBindCoreFunc = null;
36+
private static Method mGetSystemStateFunc = null;
37+
private static Method mRegisterThermalEventCallbackFunc = null;
38+
private static Method mUnRegisterThermalEventCallbackFunc = null;
39+
3440

3541
private static Class perfClass;
42+
private static Class IThermalEventCallBackClass = null;
3643
private static PathClassLoader perfClassLoader;
3744

3845
private static Constructor<Class> mConstructor = null;
@@ -43,6 +50,7 @@ public class MiBridge {
4350
perfClassLoader = new PathClassLoader(PERFORMANCE_JAR,
4451
ClassLoader.getSystemClassLoader());
4552
perfClass = perfClassLoader.loadClass(PERFORMANCE_CLASS);
53+
IThermalEventCallBackClass = perfClassLoader.loadClass(ITHERMALEVENTCALLBACK_CLASS);
4654
mConstructor = perfClass.getConstructor();
4755
Class[] argClasses = new Class[]{String.class, int.class};
4856
try {
@@ -140,6 +148,28 @@ public class MiBridge {
140148
} catch (Exception e) {
141149
Log.e(TAG, "requestIOPrefetch no exit");
142150
}
151+
152+
try {
153+
argClasses = new Class[]{int.class, Context.class, int.class};
154+
mGetSystemStateFunc = perfClass.getDeclaredMethod("getSystemState", argClasses);
155+
} catch (Exception e) {
156+
Log.e(TAG, "getSystemState no exit");
157+
}
158+
159+
try {
160+
argClasses = new Class[] {int.class, IThermalEventCallBackClass };
161+
mRegisterThermalEventCallbackFunc = perfClass.getDeclaredMethod("registerThermalEventCallback", argClasses);
162+
} catch (Exception e) {
163+
Log.e(TAG, "registerThermalEventCallback no exit, " + e);
164+
}
165+
166+
try {
167+
argClasses = new Class[]{int.class, IThermalEventCallBackClass };
168+
mUnRegisterThermalEventCallbackFunc = perfClass.getDeclaredMethod("unRegisterThermalEventCallback", argClasses);
169+
} catch (Exception e) {
170+
Log.e(TAG, "UnRegisterThermalEventCallback no exit");
171+
}
172+
143173
} catch (Exception e) {
144174
Log.e(TAG, "MiBridge() : Load Class Exception: " + e);
145175
}
@@ -299,4 +329,54 @@ public static int requestIOPrefetch(int uid, String filePath) {
299329
}
300330
return ret;
301331
}
332+
333+
public static int getSystemState(int uid, Context context, int type) {
334+
int ret = -1;
335+
try {
336+
Object retVal = mGetSystemStateFunc.invoke(mPerf, uid, context, type);
337+
ret = (int) retVal;
338+
} catch (Exception e) {
339+
Log.e(TAG, "get system state failed , e:" + e.toString());
340+
}
341+
return ret;
342+
}
343+
344+
public static int registerThermalEventCallback(int uid, ThermalEventCallBack cb) {
345+
int ret = -1;
346+
Object Obj = null;
347+
try {
348+
Obj = cb.getProxy(IThermalEventCallBackClass);
349+
} catch (Exception e) {
350+
Log.e(TAG, "getProxy failed, e: " + e.toString());
351+
return ret;
352+
}
353+
354+
try {
355+
Object retVal = mRegisterThermalEventCallbackFunc.invoke(mPerf, uid, Obj);
356+
ret = (int) retVal;
357+
} catch (Exception e) {
358+
Log.e(TAG, "registerThermalEventCallback failed , e:" + e.toString());
359+
}
360+
return ret;
361+
}
362+
363+
364+
public static int unRegisterThermalEventCallback(int uid, ThermalEventCallBack cb) {
365+
int ret = -1;
366+
Object Obj = null;
367+
try {
368+
Obj = cb.getProxy(IThermalEventCallBackClass);
369+
} catch (Exception e) {
370+
Log.e(TAG, "getProxy failed, e: " + e.toString());
371+
return ret;
372+
}
373+
try {
374+
Object retVal = mUnRegisterThermalEventCallbackFunc.invoke(mPerf, uid, Obj);
375+
ret = (int) retVal;
376+
} catch (Exception e) {
377+
Log.e(TAG, "unRegisterThermalEventCallback failed , e:" + e.toString());
378+
}
379+
return ret;
380+
}
381+
302382
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.mi.mibridge;
2+
3+
import android.util.Log;
4+
5+
import java.lang.reflect.InvocationHandler;
6+
import java.lang.reflect.Method;
7+
import java.lang.reflect.Proxy;
8+
9+
public class ThermalEventCallBack implements InvocationHandler {
10+
private static final String TAG = "MiBridge";
11+
private Object mObj = null;
12+
private Object mTarget = null;
13+
14+
public void onThermalLevelChanged(int level){};
15+
16+
public int getProxyHashCode() {
17+
return this.hashCode();
18+
}
19+
20+
public Object getProxy(Class IThermalEventCallBack) {
21+
mTarget = IThermalEventCallBack.getInterfaces();
22+
mObj = Proxy.newProxyInstance(IThermalEventCallBack.getClassLoader(), new Class[] { IThermalEventCallBack }, this);
23+
return mObj;
24+
}
25+
26+
@Override
27+
public Object invoke(Object o, Method method, Object[] args) throws Throwable {
28+
Object ret = null;
29+
30+
if(mTarget == null) {
31+
Log.e(TAG, "getProxy fisrt!");
32+
}
33+
34+
if(method.getName() == "onThermalLevelChanged" && args != null) {
35+
int level = Integer.parseInt(String.valueOf(args[0]));
36+
onThermalLevelChanged(level);
37+
return null;
38+
} else if(method.getName() == "getProxyHashCode") {
39+
ret = getProxyHashCode();
40+
return ret;
41+
}
42+
43+
try {
44+
ret = method.invoke(mTarget, args);
45+
} catch (Exception e) {
46+
Log.e(TAG, "method invoke failed, e: " + e);
47+
}
48+
49+
return ret;
50+
}
51+
}

0 commit comments

Comments
 (0)