<permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+ <uses-permission android:name="android.permission.VIBRATE" />
+
<application
android:name=".IcLauncherApplication"
android:allowBackup="true"
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
+import androidx.core.view.GestureDetectorCompat;
import android.Manifest;
import android.annotation.SuppressLint;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.TypedValue;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
import com.ic.launcher.databinding.ActivityQrCodeBinding;
+import com.ic.launcher.listener.MainClockGestureDetectorImpl;
import com.ic.launcher.util.QRCodeUtil;
-public class QrCodeActivity extends AppCompatActivity {
+public class QrCodeActivity extends AppCompatActivity implements
+ MainClockGestureDetectorImpl.OnClockGestureFlingListener {
final static String KeyIMEI = "IMEI";
+ private GestureDetectorCompat gesture;
@Override
protected void onCreate(Bundle savedInstanceState) {
ActivityQrCodeBinding qrCodeBinding = ActivityQrCodeBinding.inflate(getLayoutInflater());
setContentView(qrCodeBinding.getRoot());
- String imei = getPrefStringPublic(this,KeyIMEI,null);
- if(TextUtils.isEmpty(imei)){
- imei=GetIMEI();
+ String imei = getPrefStringPublic(this, KeyIMEI, null);
+ if (TextUtils.isEmpty(imei)) {
+ imei = GetIMEI();
}
- if(TextUtils.isEmpty(imei)){
- qrCodeBinding.setQrCodeDrawable(ContextCompat.getDrawable(this,R.drawable.ic_qr_code_imei));
+ if (TextUtils.isEmpty(imei)) {
+ qrCodeBinding.setQrCodeDrawable(ContextCompat.getDrawable(this, R.drawable.ic_qr_code_imei));
qrCodeBinding.setQrCodeText("未查询到IEMI");
- }else{
+ } else {
Bitmap mBitmap = QRCodeUtil.createQRCodeBitmap(imei, (int) dpToPx(200), (int) dpToPx(200));
qrCodeBinding.setQrCodeDrawable(new BitmapDrawable(getResources(), mBitmap));
qrCodeBinding.setQrCodeText(imei);
}
+
+ gesture = new GestureDetectorCompat(this, new MainClockGestureDetectorImpl(this));
}
@SuppressLint("WorldReadableFiles")
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics());
}
+ @Override
+ public void onDirection(int flag) {
+ if (flag == 2) {
+ finish();
+ }
+ }
+
+ @Override
+ public void onDouble() {
+
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ if (gesture.onTouchEvent(event)) {
+ return true;
+ }
+ return true;
+ }
+
+ @Override
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ // 禁用 KEYCODE_BACK 退出功能
+ finish();
+
+ }
+ return false;
+ }
+
}
import com.ic.launcher.configure.l02.L02Icon;
import com.ic.launcher.util.IcLog;
+import com.ic.launcher.util.SoundPlayUtils;
+import com.ic.launcher.util.VibrateUtil;
public class BatteryPresenter extends PresenterCycle {
private Context mContext;
+ private SoundPlayUtils playUtils;
+
private boolean isLowPowerState = false;
+ private boolean isPlaySound;
+ private boolean isPlayFullSound=false;
private MediatorLiveData<String> mObsBatteryValue;
private MediatorLiveData<Boolean> mObsBatteryCharging;
mObsLowPower = new MediatorLiveData<>();
mObsLowPowerValue = new MediatorLiveData<>();
+
+ playUtils = new SoundPlayUtils();
+ playUtils.init();
+
+ isPlaySound=false;
}
/**
public void registerBatteryReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
+ filter.addAction(Intent.ACTION_POWER_CONNECTED);
filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
mContext.registerReceiver(mIntentReceiver, filter);
}
switch (acyion) {
case Intent.ACTION_BATTERY_CHANGED:
- IcLog.i(TAG, "Battery Statu: ACTION_BATTERY_CHANGED");
int status = intent.getIntExtra("status", -1);
int rawlevel = intent.getIntExtra("level", -1);
int scale = intent.getIntExtra("scale", -1);
case Intent.ACTION_POWER_DISCONNECTED:
// 没有接电源
mObsBatteryCharging.setValue(false);
+ showShockAndAudio(1);
IcLog.i(TAG, "POWER ACTION_POWER_DISCONNECTED");
break;
+ case Intent.ACTION_POWER_CONNECTED:
+ //接电源
+ IcLog.i(TAG, "POWER ACTION_POWER_CONNECTED");
+ showShockAndAudio(0);
+ break;
}
}
}
shutDown();
} else if (level <= LOW_LEVEL) {
//进入低电量
- if(!gotoLowPowerMode(level)){
- updateBatteryObserveValue(level,status);
+ if (!gotoLowPowerMode(level)) {
+ updateBatteryObserveValue(level, status);
}
} else {
//退出低电量模式
mObsLowPower.setValue(false);
isLowPowerState = false;
}
- updateBatteryObserveValue(level,status);
+ updateBatteryObserveValue(level, status);
}
}
- private void updateBatteryObserveValue(int level,int status){
+ private void updateBatteryObserveValue(int level, int status) {
mObsBatteryResID.setValue(L02Icon.l02BatteryResId[getBatteryLevel(level)]);
mObsBatteryValue.setValue(level + "%");
- if (BatteryManager.BATTERY_STATUS_CHARGING == status) {
- mObsBatteryCharging.setValue(true);
- } else {
- mObsBatteryCharging.setValue(false);
+ switch (status){
+ case BatteryManager.BATTERY_STATUS_CHARGING:
+ IcLog.i(TAG, "Battery Statu: BATTERY_STATUS_CHARGING");
+ mObsBatteryCharging.setValue(true);
+ if(!isPlaySound){
+ showShockAndAudio(0);
+ isPlaySound=true;
+ }
+ isPlayFullSound=false;
+ break;
+ case BatteryManager.BATTERY_STATUS_FULL:
+ IcLog.i(TAG, "Battery Statu: BATTERY_STATUS_FULL");
+ mObsBatteryCharging.setValue(false);
+ /**if(!isPlayFullSound){
+ showShockAndAudio(2);
+ isPlayFullSound=true;
+ }**/
+ break;
}
}
IcLog.e(TAG, "shutdown", e);
}
}
+
+ private void showShockAndAudio(int index){
+ VibrateUtil.getInstance(mContext).VibrateOn(true);
+ playUtils.playKeyboardSound(mContext, index);
+ }
}
--- /dev/null
+package com.ic.launcher.util;
+
+import android.content.Context;
+import android.media.AudioManager;
+import android.media.SoundPool;
+import android.util.SparseArray;
+
+import com.ic.launcher.R;
+
+
+public class SoundPlayUtils {
+
+ private int nowSoundNum;
+ private SoundPool mSoundPlayer;
+ private SoundPool.OnLoadCompleteListener SoundLoadListener;
+ private SparseArray soundID;
+
+ private static final int[] NUM_RAW= new int[]{
+ R.raw.chrg_connect,
+ R.raw.chrg_remove,
+ R.raw.chrg_complete};
+
+
+ public void init() {
+ if (mSoundPlayer == null) {
+ mSoundPlayer = new SoundPool(1, AudioManager.STREAM_SYSTEM, 0);
+ }
+ soundID = new SparseArray();
+ }
+
+ public void releaseSoundPlayer() {
+ if (mSoundPlayer != null) {
+ mSoundPlayer.release();
+ }
+ mSoundPlayer = null;
+ }
+
+ public void playKeyboardSound(Context context,int key) {
+ nowSoundNum = key;
+
+ if (soundID.get(key) == null) {
+ if (SoundLoadListener == null) {
+ SoundLoadListener = (soundPool, sampleId, status) -> SaveSoundIDandPlay(sampleId);
+ mSoundPlayer.setOnLoadCompleteListener(SoundLoadListener);
+ }
+ mSoundPlayer.load(context,NUM_RAW[key],1);
+
+ } else {
+ mSoundPlayer.play((Integer) soundID.get(key), 1, 1, 0, 0, 1);
+ }
+ }
+
+ private synchronized void SaveSoundIDandPlay(int sampleId) {
+ mSoundPlayer.play(sampleId, 1, 1, 1, 0, 1);
+ soundID.put(nowSoundNum, sampleId);
+ }
+}
--- /dev/null
+package com.ic.launcher.util;
+
+import android.content.Context;
+import android.os.Vibrator;
+
+import static android.content.Context.VIBRATOR_SERVICE;
+
+public class VibrateUtil {
+
+ private static Context mContext=null;
+ public static VibrateUtil getInstance(Context context){
+ if (mContext==null)
+ mContext=context;
+ if (vibrator==null)
+ vibrator=(Vibrator)mContext.getSystemService(VIBRATOR_SERVICE);
+ vibrateUtil=new VibrateUtil();
+ return vibrateUtil;
+ }
+ private static Vibrator vibrator = null;
+ private static VibrateUtil vibrateUtil=null;
+
+ private final long[] patter = {1000, 1000, 1000, 1000}; //1秒开,1秒关,2秒开,50ms关
+
+ public void VibrateOn(boolean on){
+ if(vibrator!=null) {
+ if (on)
+// vibrator.vibrate(patter, 0);//一直循环
+ vibrator.vibrate(50);//不循环
+ else
+ vibrator.cancel();
+ }
+ }
+
+}
-#Thu Apr 02 19:06:12 CST 2020
-VERSION_CODE=29
+#Mon Apr 06 10:46:59 CST 2020
+VERSION_CODE=30