sdm845-common: parts: Get foreground application with getFocusedStackInfo()

* The main benefit is this API recognizes applications in split
   screen far more better.

Change-Id: I4c9c2530c8090e05da558ed829d59ece5e00e1fb
This commit is contained in:
Wang Han 2020-08-22 15:15:25 +08:00 committed by Bruno Martins
parent 117b9c28cd
commit 9c5c8f6da2

View File

@ -17,18 +17,18 @@
package org.lineageos.settings.thermal;
import android.app.ActivityManager;
import android.app.ActivityManager.StackInfo;
import android.app.IActivityManager;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Handler;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import java.util.List;
public class ThermalService extends Service {
private static final String TAG = "ThermalService";
@ -39,6 +39,7 @@ public class ThermalService extends Service {
private String mPreviousApp;
private ThermalUtils mThermalUtils;
private ActivityRunnable mActivityRunnable;
private IActivityManager mIActivityManager;
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@Override
@ -57,6 +58,7 @@ public class ThermalService extends Service {
if (DEBUG) Log.d(TAG, "Creating service");
mThermalUtils = new ThermalUtils(this);
mActivityRunnable = new ActivityRunnable(this);
mIActivityManager = ActivityManager.getService();
mHandler.postDelayed(mActivityRunnable, 500);
registerReceiver();
super.onCreate();
@ -89,16 +91,17 @@ public class ThermalService extends Service {
@Override
public void run() {
ActivityManager manager = context.getSystemService(ActivityManager.class);
List<ActivityManager.RunningTaskInfo> runningTasks = manager.getRunningTasks(1);
if (runningTasks != null && runningTasks.size() > 0) {
ComponentName topActivity = runningTasks.get(0).topActivity;
String foregroundApp = topActivity.getPackageName();
mHandler.postDelayed(this, 500);
if (!foregroundApp.equals(mPreviousApp)) {
mThermalUtils.setThermalProfile(foregroundApp);
mPreviousApp = foregroundApp;
try {
StackInfo focusedStack = mIActivityManager.getFocusedStackInfo();
if (focusedStack != null && focusedStack.topActivity != null) {
String foregroundApp = focusedStack.topActivity.getPackageName();
mHandler.postDelayed(this, 500);
if (!foregroundApp.equals(mPreviousApp)) {
mThermalUtils.setThermalProfile(foregroundApp);
mPreviousApp = foregroundApp;
}
}
} catch (RemoteException ignored) {
}
}
}