package com.oplus.engineermode.entrance;
import android.app.AlertDialog;
import android.app.KeyguardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.PowerManager;
import android.os.SystemClock;
import android.view.Window;
import android.view.WindowManager;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.oplus.engineermode.R;
import com.oplus.engineermode.core.sdk.entrance.EngineerFragmentCompat;
import com.oplus.engineermode.display.sdk.EngineerDisplayManager;
import com.oplus.engineermode.display.sdk.OplusDisplayPanelFeature;
import com.oplus.engineermode.entrance.widget.ImageOptionPreference;
import com.oplus.engineermode.core.sdk.featureoption.BaseFeatureOptions;
import com.oplus.engineermode.manualtest.modeltest.ModelTestBaseAcivity;
import com.oplus.engineermode.manualtest.modeltest.ModelTestImpl;
import com.oplus.engineermode.core.sdk.modeltest.ModelTestItem;
import com.oplus.engineermode.modeltest.ModelTestListManager;
import com.oplus.engineermode.sensornew.featureoptions.SensorFeatureOptions;
import com.oplus.engineermode.core.sdk.testrecord.constants.ReserveTestResult;
import com.oplus.engineermode.core.sdk.testrecord.constants.TestEntrance;
import com.oplus.engineermode.core.sdk.testrecord.constants.TestResult;
import com.oplus.engineermode.core.sdk.testrecord.TestRecordAssistant;
import com.oplus.engineermode.core.sdk.testrecord.record.TestRecord;
import com.oplus.engineermode.touchscreen.base.TpCommonUtils;
import com.oplus.engineermode.util.AodModeHelper;
import com.oplus.engineermode.util.ExternFunction;
import com.oplus.engineermode.core.sdk.impl.IPowerManagerImpl;
import com.oplus.engineermode.core.sdk.impl.KeyguardManagerWrapper;
import com.oplus.engineermode.core.sdk.utils.Log;
import com.oplus.engineermode.util.OplusFeatureConfigManager;
import com.oplus.engineermode.util.ProjectFeatureOptions;
import com.oplus.engineermode.core.sdk.utils.ReflectionHelper;
import com.oplus.engineermode.core.sdk.ui.ShowVerifyDialog;
import com.oplus.engineermode.core.sdk.ui.ShowVerifyDialog.VerifyCallback;
import com.oplus.engineermode.core.sdk.utils.SystemProperties;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class ProductTestFragmentCompat extends EngineerFragmentCompat {
private static final String TAG = "ProductTestFragment";
public static final String KEY_SDCARD_TEST = "sdcard_test";
public static final String KEY_SOUNDTRIGGER_TEST = "soundtrigger_test";
public static final String KEY_ELECTROCHROMIC_TEST = "electrochromic_test";
public static final String KEY_MODEL_TEST_PREFIX = "modeltest";
private static final long MILLIS_IN_FUTURE = 10000;
private static final long COUNT_DOWN_INTERVAL = 1000;
private static final String A2_SUB_BOARD_FUNCTION_TEST = "a2_sub_board_function_test";
private long mLastPreferenceClickTime = 0L;
private PreferenceScreen mPreferenceScreen;
private PowerManager mPowerManager;
private PowerManager.WakeLock mCpuWakelock;
private String mLastBlackGestureState = null;
private List<String> mNfcModelList = Arrays.asList("modeltest31", "modeltest32");
private final CountDownTimer mBrightSpotDetectTimer = new CountDownTimer(MILLIS_IN_FUTURE, COUNT_DOWN_INTERVAL) {
@Override
public void onTick(final long millisUntilFinished) {
Log.i(TAG, "mBrightSpotDetectTimer onTick");
if (mPowerManager.isInteractive()) {
Log.i(TAG, "screen already on ?");
restoreAodAndBlackGesture();
mBrightSpotDetectTimer.cancel();
KeyguardManagerWrapper.requestDismissKeyguard(getActivity());
AlertDialog.Builder dialogBuilder;
//# ifdef OPLUS_BUG_COMPATIBILITY
//ChangFeiyue@ANDROID.ENGINEERTOOL, 2020/11/21, Modify for Dialog style with oplus
Object style = ReflectionHelper.getDeclaredField(null, "com.oplus.internal.R$style", "Theme_Dialog_Alert");
//# endif /* OPLUS_BUG_COMPATIBILITY */
if (null != style) {
dialogBuilder = new AlertDialog.Builder(mContext, (int) style);
} else {
dialogBuilder = new AlertDialog.Builder(mContext);
}
dialogBuilder.setCancelable(false);
dialogBuilder.setTitle(R.string.fake_proximity_bright_spot_detect_title);
dialogBuilder.setMessage(R.string.fake_proximity_bright_spot_detect_warning);
dialogBuilder.setPositiveButton(R.string.ok, new OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, final int which) {
dialog.dismiss();
}
});
dialogBuilder.create().show();
}
}
@Override
public void onFinish() {
Log.i(TAG, "fake proximity bright spot detect pass");
restoreAodAndBlackGesture();
mPowerManager.wakeUp(SystemClock.uptimeMillis(), PowerManager.WAKE_REASON_APPLICATION,
PowerManager.wakeReasonToString(PowerManager.WAKE_REASON_APPLICATION));
KeyguardManagerWrapper.requestDismissKeyguard(getActivity());
AlertDialog.Builder dialogBuilder;
//# ifdef OPLUS_BUG_COMPATIBILITY
//ChangFeiyue@ANDROID.ENGINEERTOOL, 2020/11/21, Modify for Dialog style with oplus
Object style = ReflectionHelper.getDeclaredField(null, "com.oplus.internal.R$style", "Theme_Dialog_Alert");
//# endif /* OPLUS_BUG_COMPATIBILITY */
if (null != style) {
dialogBuilder = new AlertDialog.Builder(mContext, (int) style);
} else {
dialogBuilder = new AlertDialog.Builder(mContext);
}
dialogBuilder.setCancelable(false);
dialogBuilder.setTitle(R.string.fake_proximity_bright_spot_detect_title);
dialogBuilder.setMessage(R.string.fake_proximity_bright_spot_detect_result);
dialogBuilder.setPositiveButton(R.string.fake_proximity_bright_spot_detect_pass, new OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, final int which) {
final TestRecord testRecord = new TestRecord(ReserveTestResult.FAKE_PROXIMITY_BRIGHT_SPOT_DETECT);
testRecord.setEntrance(TestEntrance.MANUAL_TEST);
testRecord.setTestResult(TestResult.PASS);
TestRecordAssistant.saveTestRecord(testRecord);
setPreferenceState("fake_proximity_bright_spot_detect", ExternFunction.TEST_PASS_NV_FLAG);
dialog.dismiss();
}
});
dialogBuilder.setNegativeButton(R.string.fake_proximity_bright_spot_detect_fail, new OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, final int which) {
final TestRecord testRecord = new TestRecord(ReserveTestResult.FAKE_PROXIMITY_BRIGHT_SPOT_DETECT);
testRecord.setEntrance(TestEntrance.MANUAL_TEST);
testRecord.setTestResult(TestResult.FAIL);
TestRecordAssistant.saveTestRecord(testRecord);
setPreferenceState("fake_proximity_bright_spot_detect", ExternFunction.TEST_FAIL_NV_FLAG);
dialog.dismiss();
}
});
AlertDialog alertDialog = dialogBuilder.create();
KeyguardManager keyguardManager = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE);
if ((keyguardManager != null) && keyguardManager.isKeyguardSecure() && keyguardManager.isKeyguardLocked()) {
Window window = alertDialog.getWindow();
if (window != null) {
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
}
}
alertDialog.show();
}
};
/**
* Default empty constructor
*/
public ProductTestFragmentCompat() {
}
@Override
public void onDestroy() {
if (mCpuWakelock.isHeld()) {
mCpuWakelock.release();
}
super.onDestroy();
}
private void setPreferenceState(String key, byte flag) {
Preference targetPre = findPreference(key);
if (targetPre instanceof ImageOptionPreference) {
((ImageOptionPreference) targetPre).setState((int) flag);
}
}
@Override
public void onResume() {
super.onResume();
mBrightSpotDetectTimer.cancel();
byte[] buff = ExternFunction.getProductLineTestFlag();
for (int i = ReserveTestResult.MODEL_TEST_1.getIndex(); i <= ReserveTestResult.MODEL_TEST_20.getIndex(); i++) {
setPreferenceState(KEY_MODEL_TEST_PREFIX + (i + 1), buff[i]);
}
if (buff[ReserveTestResult.SDCARD_DETECT.getIndex()] == ExternFunction.TEST_PASS_NV_FLAG) {
setPreferenceState(KEY_SDCARD_TEST, buff[ReserveTestResult.SDCARD_DETECT.getIndex()]);
} else {
setPreferenceState(KEY_SDCARD_TEST, ExternFunction.NOT_TEST_NV_FLAG);
}
setPreferenceState("fake_proximity_bright_spot_detect", buff[ReserveTestResult.FAKE_PROXIMITY_BRIGHT_SPOT_DETECT.getIndex()]);
setPreferenceState(KEY_SOUNDTRIGGER_TEST, buff[ReserveTestResult.SOUND_TRIGGER_TEXT.getIndex()]);
setPreferenceState(KEY_ELECTROCHROMIC_TEST, buff[ReserveTestResult.ELECTROCHROMIC_TEST.getIndex()]);
}
@Override
public boolean onPreferenceTreeClick(Preference preference) {
String key = preference.getKey();
Log.i(TAG, "onPreferenceTreeClick : intent=" + preference.getIntent() + ", key=" + key);
// to avoid launch some test twice
long current = SystemClock.elapsedRealtime();
if (current - mLastPreferenceClickTime > 300) {
mLastPreferenceClickTime = current;
} else {
Log.i(TAG, "double click too fast");
return true;
}
if ((key != null) && ("screen_component_test_setting".equals(preference.getKey()))) {
showInputDialog(preference);
return true;
}
if ((preference instanceof ImageOptionPreference) && (key != null) && key.startsWith(KEY_MODEL_TEST_PREFIX)) {
Intent intent = new Intent(mContext, ModelTestImpl.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra(ModelTestImpl.MODELTEST_KEY, key);
startActivity(intent);
return true;
}
if ("fake_proximity_bright_spot_detect".equals(key)) {
final TestRecord testRecord = new TestRecord(ReserveTestResult.FAKE_PROXIMITY_BRIGHT_SPOT_DETECT);
testRecord.setEntrance(TestEntrance.MANUAL_TEST);
testRecord.setTestResult(TestResult.PENDING);
TestRecordAssistant.saveTestRecord(testRecord);
enableAodAndBlackGesture();
SystemClock.sleep(200);
if (mCpuWakelock.isHeld()) {
mCpuWakelock.release();
}
mCpuWakelock.acquire(MILLIS_IN_FUTURE + COUNT_DOWN_INTERVAL);
mPowerManager.goToSleep(SystemClock.uptimeMillis());
mBrightSpotDetectTimer.cancel();
mBrightSpotDetectTimer.start();
}
return super.onPreferenceTreeClick(preference);
}
private void showInputDialog(Preference preference) {
ShowVerifyDialog showVerifyDialog = new ShowVerifyDialog(mContext);
showVerifyDialog.setVerifyKeyMode(ShowVerifyDialog.WARN);
showVerifyDialog.show(new VerifyCallback() {
@Override
public void onNegativeClick() {
}
@Override
public void onPositiveClick(final boolean verifyPass) {
if (verifyPass) {
Intent intent = preference.getIntent();
if (intent != null) {
mContext.startActivity(intent);
}
} else {
Log.i(TAG, "wrong passwd");
}
}
@Override
public void onDismiss() {
}
});
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
mCpuWakelock = IPowerManagerImpl.newWakeLock(mContext, PowerManager.PARTIAL_WAKE_LOCK, TAG);
}
@Override
public void onCreatePreferences(Bundle bundle, String s) {
mPreferenceScreen = getPreferenceManager().createPreferenceScreen(mContext);
setPreferenceScreen(mPreferenceScreen);
// add product line test list
ModelTestListManager modelTestListManager = ModelTestListManager.getInstance(mContext.getApplicationContext());
Map<String, List<ModelTestItem>> internalModelTestMap = modelTestListManager.getInternalModelTestConfig();
Map<String, List<ModelTestItem>> externalModelTestMap = modelTestListManager.getExternalModelTestConfig();
Map<String, List<ModelTestItem>> defaultModelTestMap = modelTestListManager.getDefaultModelTestConfig(mContext);
for (int i = 1; i <= ModelTestBaseAcivity.RESERVED_MODEL_TEST_END; i++) {
String modelTestKey = KEY_MODEL_TEST_PREFIX + i;
if (mNfcModelList.contains(modelTestKey)){
Log.i(TAG, "nfc modelTestKey not show:" + modelTestKey);
continue;
}
String modelTestXmlId = modelTestKey + "_list.xml";
Preference modelTest = null;
if ((externalModelTestMap != null) && externalModelTestMap.containsKey(modelTestXmlId)) {
List<ModelTestItem> modelTestItemList = externalModelTestMap.get(modelTestXmlId);
if ((modelTestItemList != null) && !modelTestItemList.isEmpty()) {
modelTest = new ImageOptionPreference(mContext);
modelTest.setTitle(getString(R.string.model_test_prefix) + i);
modelTest.setKey(modelTestKey);
modelTest.setSummary("Customization");
if (ProjectFeatureOptions.isActivityAvailable(mContext, new Intent(mContext, ModelTestImpl.class))) {
mPreferenceScreen.addPreference(modelTest);
}
}
}
if (modelTest == null) {
List<ModelTestItem> modelTestItemList = null;
if ((internalModelTestMap != null) && internalModelTestMap.containsKey(modelTestXmlId)) {
modelTestItemList = internalModelTestMap.get(modelTestXmlId);
} else if ((defaultModelTestMap != null) && defaultModelTestMap.containsKey(modelTestXmlId)) {
modelTestItemList = defaultModelTestMap.get(modelTestXmlId);
}
if ((modelTestItemList != null) && !modelTestItemList.isEmpty()) {
modelTest = new ImageOptionPreference(mContext);
modelTest.setTitle(getString(R.string.model_test_prefix) + i);
modelTest.setKey(modelTestKey);
if (ProjectFeatureOptions.isActivityAvailable(mContext, new Intent(mContext, ModelTestImpl.class))) {
mPreferenceScreen.addPreference(modelTest);
}
}
}
}
// add other preferences from xml.
addPreferencesFromResource(R.xml.product_test);
loadTestPreference();
}
private void loadTestPreference() {
if (!OplusDisplayPanelFeature.isDualDisplayPanelSupport()) {
removeUnnecessaryPreference("sub_screen_aging");
}
if (BaseFeatureOptions.isSupportNavigationBar(mContext)) {
removeUnnecessaryPreference("screen_component_test");
}
if (!SensorFeatureOptions.isFakeProximitySensorSupport()) {
removeUnnecessaryPreference("fake_proximity_bright_spot_detect");
}
if (!ProjectFeatureOptions.AUDIO_SOUNDTRIGGER_SUPPORTED || (BaseFeatureOptions.DEVICE_INITIAL_SDK_INT >= Build.VERSION_CODES.R)) {
removeUnnecessaryPreference("soundtrigger_test");
}
if (!ProjectFeatureOptions.ANT_PDS_DETECT_SUPPORTED) {
removeUnnecessaryPreference("ant_pds_detect_test");
} else {
if (SystemProperties.get("ro.separate.soft", "unknown").equals("19329")) {
//19328 and 19329 are total different project, but uses same featureoptions.xml
removeUnnecessaryPreference("ant_pds_detect_test");
} else if (!SystemProperties.get("ro.hw.phone.color", "unknown").equals("FF00CECA")) {
//ant_pds_detect_test support, but with wrong color, <color name="darkgreen">#FF00CECA</color>
removeUnnecessaryPreference("ant_pds_detect_test");
}
}
if (!OplusFeatureConfigManager.isRadioESimSupport()) {
removeUnnecessaryPreference("esim_card");
}
if (!ProjectFeatureOptions.ELECTROCHROMIC_SUPPORT) {
removeUnnecessaryPreference("electrochromic_test");
}
if (!EngineerDisplayManager.MultiScreenAdapter.isRemapDisplay()) {
removeUnnecessaryPreference("sub_again_test");
}
if (!ProjectFeatureOptions.FPGA_SUPPORTED) {
removeUnnecessaryPreference("fpga_test");
removeUnnecessaryPreference(A2_SUB_BOARD_FUNCTION_TEST);
}
}
//Add for fake proximity bright spot detect
private void enableAodAndBlackGesture() {
if (mLastBlackGestureState == null) {
mLastBlackGestureState = TpCommonUtils.getBlackGestureEnableState();
}
TpCommonUtils.setBlackGestureEnableState(TpCommonUtils.ENABLE_BLACK_GESTURE);
AodModeHelper.getInstance().enableAod(mContext.getContentResolver());
}
private void restoreAodAndBlackGesture() {
if (mLastBlackGestureState != null) {
TpCommonUtils.setBlackGestureEnableState(mLastBlackGestureState);
mLastBlackGestureState = null;
}
AodModeHelper.getInstance().restoreAod(mContext.getContentResolver());
}
}
最新发布