import android.app.Application;
+import com.ic.launcher.presenter.BatteryPresenter;
+import com.ic.launcher.presenter.TimeDatePresenter;
import com.ic.launcher.util.CrashHandler;
import com.ic.launcher.util.IcLog;
import com.jakewharton.threetenabp.AndroidThreeTen;
public class IcLauncherApplication extends Application {
+ private TimeDatePresenter timeDatePresenter;
+ private BatteryPresenter batteryPresenter;
+
@Override
public void onCreate() {
super.onCreate();
IcLog.setLogHead("IcLauncher");
AndroidThreeTen.init(this);
+
+ timeDatePresenter = new TimeDatePresenter(this);
+ batteryPresenter = new BatteryPresenter(this);
+ }
+
+ public TimeDatePresenter getTimeDatePresenter() {
+ return timeDatePresenter;
+ }
+
+ public BatteryPresenter getBatteryPresenter() {
+ return batteryPresenter;
}
}
ftManage = new FragmentManage(this,getSupportFragmentManager());
ftManage.showCurrMainFragment(isFinishing());
+ ((IcLauncherApplication)getApplication()).getBatteryPresenter().registerBatteryReceiver();
+ ((IcLauncherApplication)getApplication()).getTimeDatePresenter().registerTimeDateReceiver();
registerChangeClockReceiver();
ServiceUtil.startServiceUtil(getApplicationContext(),
@Override
protected void onDestroy() {
super.onDestroy();
- unRegisterTimeDateReceiver();
+ ((IcLauncherApplication)getApplication()).getBatteryPresenter().unRegisterBatteryReceiver();
+ ((IcLauncherApplication)getApplication()).getTimeDatePresenter().unRegisterTimeDateReceiver();
+ unRegisterChangeClockReceiver();
}
@Override
registerReceiver(mIntentReceiver, filter);
}
- private void unRegisterTimeDateReceiver() {
+ private void unRegisterChangeClockReceiver() {
try {
unregisterReceiver(mIntentReceiver);
} catch (IllegalArgumentException e) {
mCurrType = bundle.getInt("type");
}
- appModel = initFragmentModel(getActivity());
+ appModel = initFragmentModel();
onObserveModelValue(appModel);
}
}
}
- private AppModel initFragmentModel(FragmentActivity activity) {
+ private AppModel initFragmentModel() {
AppModel.Factory factory = new AppModel.Factory((IcLauncherApplication) mContext.getApplicationContext());
- return new ViewModelProvider(activity, factory).get(AppModel.class);
+ return new ViewModelProvider(this, factory).get(AppModel.class);
}
private void onObserveModelValue(AppModel baseModel) {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IcLog.i(TAG,"onCreate");
- mBaseModel = initFragmentModel(getActivity(), (IcLauncherApplication) mContext.getApplicationContext());
+ mBaseModel = initFragmentModel((IcLauncherApplication) mContext.getApplicationContext());
onObserveModelValue(mBaseModel);
mBaseModel.OnUiCreate();
}
}
}
- protected abstract BaseModel initFragmentModel(FragmentActivity activity, Application application);
+ @Override
+ public void onDetach() {
+ super.onDetach();
+ IcLog.i(TAG,"onDetach");
+ }
+
+ protected abstract BaseModel initFragmentModel(Application application);
protected abstract void onObserveModelValue(BaseModel baseModel);
}
@Override
- protected BaseModel initFragmentModel(FragmentActivity activity, Application application) {
+ protected BaseModel initFragmentModel(Application application) {
L02MainModel.Factory factory = new L02MainModel.Factory(application);
- return new ViewModelProvider(activity, factory).get(L02MainModel.class);
+ return new ViewModelProvider(this, factory).get(L02MainModel.class);
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IcLauncherApplication mApp = (IcLauncherApplication) mContext.getApplicationContext();
- lowPowerModel = initFragmentModel(getActivity(),mApp);
+ lowPowerModel = initFragmentModel(mApp);
onObserveModelValue(lowPowerModel);
lowPowerModel.OnUiCreate();
}
public void onDestroy() {
super.onDestroy();
lowPowerModel.OnUiDestroy();
+ lowPowerModel=null;
}
@Override
return mPowerModeBinding.getRoot();
}
- private LowPowerModel initFragmentModel(FragmentActivity activity, Application application){
+ private LowPowerModel initFragmentModel(Application application){
LowPowerModel.Factory factory = new LowPowerModel.Factory(application);
- return new ViewModelProvider(activity, factory).get(LowPowerModel.class);
+ return new ViewModelProvider(this, factory).get(LowPowerModel.class);
}
private void onObserveModelValue(LowPowerModel baseModel) {
package com.ic.launcher.fragment.clock;
import android.app.Application;
+import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.ViewGroup;
+import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.ViewModelProvider;
import com.ic.launcher.IcLauncherApplication;
import com.ic.launcher.R;
import com.ic.launcher.fragment.BaseFragment;
+import com.ic.launcher.listener.ILowPowerStateListener;
import com.ic.launcher.mode.AnalogColorModel;
import com.ic.launcher.mode.BaseModel;
+import com.ic.launcher.util.IcLog;
import com.ic.launcher.widget.ClockDrawableView;
return new Clock12DialFragment();
}
+ private ILowPowerStateListener lowPower;
+
@Override
- protected BaseModel initFragmentModel(FragmentActivity activity, Application application) {
+ public void onAttach(@NonNull Context context) {
+ super.onAttach(context);
+
+ if (context instanceof ILowPowerStateListener) {
+ lowPower = (ILowPowerStateListener) context;
+ }
+ }
+
+ @Override
+ protected BaseModel initFragmentModel(Application application) {
AnalogColorModel.Factory factory = new AnalogColorModel.Factory(application);
- return new ViewModelProvider(activity, factory).get(AnalogColorModel.class);
+ return new ViewModelProvider(this, factory).get(AnalogColorModel.class);
}
@Override
analogModel.getObservableHourList().observe(this,hours ->{
clockDrawableView.onTimeChanged(hours[0],hours[1],hours[2]);
});
+
+ baseModel.getObservableLowPower().observe(this,status ->{
+ if(status){
+ lowPower.onLowChange(true);
+ }
+ });
}
@Override
package com.ic.launcher.fragment.clock;
import android.app.Application;
+import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.ViewModelProvider;
import com.ic.launcher.R;
import com.ic.launcher.fragment.BaseFragment;
+import com.ic.launcher.listener.ILowPowerStateListener;
import com.ic.launcher.mode.AnalogColorModel;
import com.ic.launcher.mode.BaseModel;
+import com.ic.launcher.util.IcLog;
import com.ic.launcher.widget.ClockDrawableView;
public class Clock6DialFragment extends BaseFragment {
private ClockDrawableView clockDrawableView;
+ private ILowPowerStateListener lowPower;
public static Clock6DialFragment newInstance() {
return new Clock6DialFragment();
}
@Override
- protected BaseModel initFragmentModel(FragmentActivity activity, Application application) {
+ public void onAttach(@NonNull Context context) {
+ super.onAttach(context);
+
+ if (context instanceof ILowPowerStateListener) {
+ lowPower = (ILowPowerStateListener) context;
+ }
+ }
+
+ @Override
+ protected BaseModel initFragmentModel(Application application) {
AnalogColorModel.Factory factory = new AnalogColorModel.Factory(application);
- return new ViewModelProvider(activity, factory).get(AnalogColorModel.class);
+ return new ViewModelProvider(this, factory).get(AnalogColorModel.class);
}
@Override
analogModel.getObservableHourList().observe(this,hours ->{
clockDrawableView.onTimeChanged(hours[0],hours[1],hours[2]);
});
+
+ baseModel.getObservableLowPower().observe(this,status ->{
+ if(status){
+ lowPower.onLowChange(true);
+ }
+ });
}
@Override
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
+import com.ic.launcher.IcLauncherApplication;
import com.ic.launcher.presenter.BatteryPresenter;
import com.ic.launcher.presenter.PresenterCycle;
import com.ic.launcher.presenter.TimeDatePresenter;
super(application);
mPresenter = new SparseArray<>();
- BatteryPresenter batteryPresenter = new BatteryPresenter(application.getApplicationContext());
- TimeDatePresenter timeDatePresenter = new TimeDatePresenter(application.getApplicationContext());
+ BatteryPresenter batteryPresenter = ((IcLauncherApplication)application).getBatteryPresenter();
+ TimeDatePresenter timeDatePresenter =((IcLauncherApplication)application).getTimeDatePresenter();
addPresenterList(BATTERY_LIST_INDEX, batteryPresenter);
addPresenterList(TIME_LIST_INDEX, timeDatePresenter);
public void OnUiDestroy() {
for (int i = 0; i < mPresenter.size(); i++) {
mPresenter.valueAt(i).onPresenterDestroy();
+ mPresenter.remove(i);
}
}
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
+import com.ic.launcher.IcLauncherApplication;
import com.ic.launcher.presenter.BatteryPresenter;
public class LowPowerModel extends AndroidViewModel {
private LowPowerModel(Application application) {
super(application);
- batteryPresenter = new BatteryPresenter(application);
+ batteryPresenter = ((IcLauncherApplication)application).getBatteryPresenter();
}
return mObsLowPowerValue;
}
- @Override
- public void onPresenterCreate() {
- super.onPresenterCreate();
- IcLog.i(TAG,"BatteryPresenter onPresenterCreate");
- registerBatteryReceiver();
- }
-
- @Override
- public void onPresenterDestroy() {
- super.onPresenterDestroy();
- IcLog.i(TAG,"BatteryPresenter onPresenterDestroy");
- unRegisterBatteryReceiver();
- }
-
public BatteryPresenter(Context context) {
mContext = context;
/**
* 注册监听电量改变,充电拔出广播
*/
- private void registerBatteryReceiver() {
+ public void registerBatteryReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
/**
* 移除广播
*/
- private void unRegisterBatteryReceiver() {
+ public void unRegisterBatteryReceiver() {
try {
mContext.unregisterReceiver(mIntentReceiver);
} catch (IllegalArgumentException e) {
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MediatorLiveData;
+import com.ic.launcher.util.IcLog;
+
public class PhoneStatePresenter extends PresenterCycle {
private static final String TAG = "PhoneStatePresenter";
@Override
public void onPresenterResume() {
super.onPresenterResume();
+ IcLog.i(TAG,"onPresenterResume");
if(mQueryThread == null){
mQueryThread = new Thread(queryState);
mQueryThread.start();
@Override
public void onPresenterPause() {
super.onPresenterPause();
+ IcLog.i(TAG,"onPresenterPause");
if (mQueryThread != null && queryState != null) {
queryState.pauseQueryThread();
}
@Override
public void onPresenterDestroy() {
super.onPresenterDestroy();
+ IcLog.i(TAG,"onPresenterDestroy");
if (mQueryThread != null) {
mQueryThread.interrupt();
}
}
public PhoneStatePresenter(Context context) {
+ IcLog.i(TAG,"PhoneStatePresenter");
mObsPhoneTypeID = new MediatorLiveData<>();
mObsPhoneSignalID = new MediatorLiveData<>();
mObsPhoneTransportID = new MediatorLiveData<>();
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.content.pm.PackageManager;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
private Thread loopThread = null;
private LoopSecondThread mLoopSecond = null;
- private boolean mAnalogClock=false;
+ private boolean mAnalogClock = false;
private SecondMessage secondMessage;
- @Override
- public void onPresenterCreate() {
- super.onPresenterCreate();
- registerTimeDateReceiver();
- }
-
@Override
public void onPresenterResume() {
super.onPresenterResume();
+ IcLog.i(TAG, "onPresenterResume");
//如果获取秒钟的线程没有启动。则启动
if (mAnalogClock) {
if (loopThread == null || mLoopSecond == null) {
@Override
public void onPresenterPause() {
super.onPresenterPause();
+ IcLog.i(TAG, "onPresenterPause");
if (mAnalogClock) {
if (mLoopSecond != null) {
mLoopSecond.pauseQueryThread();
@Override
public void onPresenterDestroy() {
super.onPresenterDestroy();
- unRegisterTimeDateReceiver();
+ IcLog.i(TAG, "onPresenterDestroy");
if (loopThread != null) {
loopThread.interrupt();
+ mLoopSecond = null;
+ loopThread = null;
}
}
}
public TimeDatePresenter(Context context) {
+ IcLog.i(TAG, "TimeDatePresenter");
mContext = context;
mObsTime = new MediatorLiveData<>();
}
- private void registerTimeDateReceiver() {
+ public void registerTimeDateReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_TIME_TICK);
filter.addAction(Intent.ACTION_TIME_CHANGED);
mContext.registerReceiver(mIntentReceiver, filter);
}
- private void unRegisterTimeDateReceiver() {
+ public void unRegisterTimeDateReceiver() {
try {
mContext.unregisterReceiver(mIntentReceiver);
} catch (IllegalArgumentException e) {
localDateTime.getSecond()});
}
- private static class SecondMessage extends Handler{
+ private static class SecondMessage extends Handler {
private WeakReference<TimeDatePresenter> reference;
public SecondMessage(TimeDatePresenter ref) {
- this.reference = new WeakReference<TimeDatePresenter>(ref) ;
+ this.reference = new WeakReference<TimeDatePresenter>(ref);
}
@Override
private class LoopSecondThread extends QueryThread {
@Override
void onThreadExecute() {
- if(secondMessage != null){
+ if (secondMessage != null) {
+ IcLog.i(TAG, "LoopSecondThread....................");
secondMessage.sendEmptyMessage(1);
}
}
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.PaintFlagsDrawFilter;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
private int mDialWidth;
private int mDialHeight;
-
private float mMinutes;
private float mHour;
private float mSecond;
private int rX;
private int rY;
+ private PaintFlagsDrawFilter filter;
+
public ClockDrawableView(Context context) {
this(context, null);
}
rX = mDialWidth / 2;
rY = mDialHeight / 2;
+
+ filter = new PaintFlagsDrawFilter(0, Paint.FILTER_BITMAP_FLAG);
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
+
+ canvas.setDrawFilter(filter);
//绘制小时
drawCustomDrawable(canvas, mHourHand, rX, rY, mHour / 12.0f * 360.0f);
//绘制分钟
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/clock6_hand_cap"
- android:layout_gravity="center"/>
+ android:layout_gravity="center"
+ android:background="@android:color/transparent"/>
</FrameLayout>
\ No newline at end of file
-#Sun Mar 29 18:27:02 CST 2020
-VERSION_CODE=24
+#Mon Mar 30 10:44:50 CST 2020
+VERSION_CODE=25