1.修复切换表盘手机不能获取的问题。原因是线程停止了没有启动。
authorkfl_614 <kfl_614@163.com>
Mon, 30 Mar 2020 02:55:46 +0000 (10:55 +0800)
committerkfl_614 <kfl_614@163.com>
Mon, 30 Mar 2020 02:55:46 +0000 (10:55 +0800)
2.修复切换表盘后秒表不动的问题。原因同上。
3.修复了时间和电池广播重复注册的问题。改成在Activity OnCreate中注册监听。
4.修复ViewModel全局修改成局部。

Signed-off-by: kfl_614 <kfl_614@163.com>
16 files changed:
app/src/main/java/com/ic/launcher/IcLauncherApplication.java
app/src/main/java/com/ic/launcher/MainActivity.java
app/src/main/java/com/ic/launcher/fragment/AppListFragment.java
app/src/main/java/com/ic/launcher/fragment/BaseFragment.java
app/src/main/java/com/ic/launcher/fragment/L02MainFragment.java
app/src/main/java/com/ic/launcher/fragment/LowPowerModeFragment.java
app/src/main/java/com/ic/launcher/fragment/clock/Clock12DialFragment.java
app/src/main/java/com/ic/launcher/fragment/clock/Clock6DialFragment.java
app/src/main/java/com/ic/launcher/mode/BaseModel.java
app/src/main/java/com/ic/launcher/mode/LowPowerModel.java
app/src/main/java/com/ic/launcher/presenter/BatteryPresenter.java
app/src/main/java/com/ic/launcher/presenter/PhoneStatePresenter.java
app/src/main/java/com/ic/launcher/presenter/TimeDatePresenter.java
app/src/main/java/com/ic/launcher/widget/ClockDrawableView.java
app/src/main/res/layout/fragment_clock_6_dial.xml
app/version_code.properties

index 169218f..0b2a896 100644 (file)
@@ -2,12 +2,17 @@ package com.ic.launcher;
 
 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();
@@ -16,5 +21,16 @@ public class IcLauncherApplication extends Application {
 
         IcLog.setLogHead("IcLauncher");
         AndroidThreeTen.init(this);
+
+        timeDatePresenter = new TimeDatePresenter(this);
+        batteryPresenter = new BatteryPresenter(this);
+    }
+
+    public TimeDatePresenter getTimeDatePresenter() {
+        return timeDatePresenter;
+    }
+
+    public BatteryPresenter getBatteryPresenter() {
+        return batteryPresenter;
     }
 }
index 7a8ab87..529fadf 100644 (file)
@@ -38,6 +38,8 @@ public class MainActivity extends AppCompatActivity implements
         ftManage = new FragmentManage(this,getSupportFragmentManager());
         ftManage.showCurrMainFragment(isFinishing());
 
+        ((IcLauncherApplication)getApplication()).getBatteryPresenter().registerBatteryReceiver();
+        ((IcLauncherApplication)getApplication()).getTimeDatePresenter().registerTimeDateReceiver();
         registerChangeClockReceiver();
 
         ServiceUtil.startServiceUtil(getApplicationContext(),
@@ -56,7 +58,9 @@ public class MainActivity extends AppCompatActivity implements
     @Override
     protected void onDestroy() {
         super.onDestroy();
-        unRegisterTimeDateReceiver();
+        ((IcLauncherApplication)getApplication()).getBatteryPresenter().unRegisterBatteryReceiver();
+        ((IcLauncherApplication)getApplication()).getTimeDatePresenter().unRegisterTimeDateReceiver();
+        unRegisterChangeClockReceiver();
     }
 
     @Override
@@ -119,7 +123,7 @@ public class MainActivity extends AppCompatActivity implements
         registerReceiver(mIntentReceiver, filter);
     }
 
-    private void unRegisterTimeDateReceiver() {
+    private void unRegisterChangeClockReceiver() {
         try {
             unregisterReceiver(mIntentReceiver);
         } catch (IllegalArgumentException e) {
index f5fa09c..6d3c3f2 100644 (file)
@@ -72,7 +72,7 @@ public class AppListFragment extends Fragment {
             mCurrType = bundle.getInt("type");
         }
 
-        appModel = initFragmentModel(getActivity());
+        appModel = initFragmentModel();
         onObserveModelValue(appModel);
     }
 
@@ -108,9 +108,9 @@ public class AppListFragment extends Fragment {
         }
     }
 
-    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) {
index 6c540e5..ee7dccf 100644 (file)
@@ -42,7 +42,7 @@ public abstract class BaseFragment extends Fragment {
     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();
     }
@@ -74,7 +74,13 @@ public abstract class BaseFragment extends Fragment {
         }
     }
 
-    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);
 
 
index acd042a..217e3e7 100644 (file)
@@ -42,9 +42,9 @@ public class L02MainFragment extends BaseFragment {
     }
 
     @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
index 68eac0c..6acbeea 100644 (file)
@@ -60,7 +60,7 @@ public class LowPowerModeFragment extends Fragment {
     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();
     }
@@ -69,6 +69,7 @@ public class LowPowerModeFragment extends Fragment {
     public void onDestroy() {
         super.onDestroy();
         lowPowerModel.OnUiDestroy();
+        lowPowerModel=null;
     }
 
     @Override
@@ -81,9 +82,9 @@ public class LowPowerModeFragment extends Fragment {
         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) {
index 4e49fb0..2602289 100644 (file)
@@ -1,6 +1,7 @@
 package com.ic.launcher.fragment.clock;
 
 import android.app.Application;
+import android.content.Context;
 import android.os.Bundle;
 
 import android.view.LayoutInflater;
@@ -8,14 +9,17 @@ 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.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;
 
 
@@ -27,10 +31,21 @@ public class Clock12DialFragment extends BaseFragment {
         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
@@ -39,6 +54,12 @@ public class Clock12DialFragment extends BaseFragment {
         analogModel.getObservableHourList().observe(this,hours ->{
             clockDrawableView.onTimeChanged(hours[0],hours[1],hours[2]);
         });
+
+        baseModel.getObservableLowPower().observe(this,status ->{
+            if(status){
+                lowPower.onLowChange(true);
+            }
+        });
     }
 
     @Override
index 54e0af4..7f3c3f9 100644 (file)
@@ -1,33 +1,47 @@
 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
@@ -36,6 +50,12 @@ public class Clock6DialFragment extends BaseFragment {
         analogModel.getObservableHourList().observe(this,hours ->{
             clockDrawableView.onTimeChanged(hours[0],hours[1],hours[2]);
         });
+
+        baseModel.getObservableLowPower().observe(this,status ->{
+            if(status){
+                lowPower.onLowChange(true);
+            }
+        });
     }
 
     @Override
index 8a56e99..15651a3 100644 (file)
@@ -7,6 +7,7 @@ import androidx.annotation.NonNull;
 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;
@@ -24,8 +25,8 @@ public abstract class BaseModel extends AndroidViewModel {
         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);
@@ -60,6 +61,7 @@ public abstract class BaseModel extends AndroidViewModel {
     public void OnUiDestroy() {
         for (int i = 0; i < mPresenter.size(); i++) {
             mPresenter.valueAt(i).onPresenterDestroy();
+            mPresenter.remove(i);
         }
     }
 
index 6002e43..6f15e70 100644 (file)
@@ -8,6 +8,7 @@ import androidx.lifecycle.LiveData;
 import androidx.lifecycle.ViewModel;
 import androidx.lifecycle.ViewModelProvider;
 
+import com.ic.launcher.IcLauncherApplication;
 import com.ic.launcher.presenter.BatteryPresenter;
 
 public class LowPowerModel extends AndroidViewModel {
@@ -16,7 +17,7 @@ public class LowPowerModel extends AndroidViewModel {
 
     private LowPowerModel(Application application) {
         super(application);
-        batteryPresenter = new BatteryPresenter(application);
+        batteryPresenter = ((IcLauncherApplication)application).getBatteryPresenter();
 
     }
 
index 23cbc09..4a7799b 100644 (file)
@@ -50,20 +50,6 @@ public class BatteryPresenter extends PresenterCycle {
         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;
 
@@ -78,7 +64,7 @@ public class BatteryPresenter extends PresenterCycle {
     /**
      * 注册监听电量改变,充电拔出广播
      */
-    private void registerBatteryReceiver() {
+    public void registerBatteryReceiver() {
         IntentFilter filter = new IntentFilter();
         filter.addAction(Intent.ACTION_BATTERY_CHANGED);
         filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
@@ -88,7 +74,7 @@ public class BatteryPresenter extends PresenterCycle {
     /**
      * 移除广播
      */
-    private void unRegisterBatteryReceiver() {
+    public void unRegisterBatteryReceiver() {
         try {
             mContext.unregisterReceiver(mIntentReceiver);
         } catch (IllegalArgumentException e) {
index 896ffba..dc2449a 100644 (file)
@@ -5,6 +5,8 @@ import android.content.Context;
 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";
@@ -20,6 +22,7 @@ public class PhoneStatePresenter extends PresenterCycle {
     @Override
     public void onPresenterResume() {
         super.onPresenterResume();
+        IcLog.i(TAG,"onPresenterResume");
         if(mQueryThread == null){
             mQueryThread = new Thread(queryState);
             mQueryThread.start();
@@ -31,6 +34,7 @@ public class PhoneStatePresenter extends PresenterCycle {
     @Override
     public void onPresenterPause() {
         super.onPresenterPause();
+        IcLog.i(TAG,"onPresenterPause");
         if (mQueryThread != null && queryState != null) {
             queryState.pauseQueryThread();
         }
@@ -39,6 +43,7 @@ public class PhoneStatePresenter extends PresenterCycle {
     @Override
     public void onPresenterDestroy() {
         super.onPresenterDestroy();
+        IcLog.i(TAG,"onPresenterDestroy");
         if (mQueryThread != null) {
             mQueryThread.interrupt();
         }
@@ -52,6 +57,7 @@ public class PhoneStatePresenter extends PresenterCycle {
     }
 
     public PhoneStatePresenter(Context context) {
+        IcLog.i(TAG,"PhoneStatePresenter");
         mObsPhoneTypeID = new MediatorLiveData<>();
         mObsPhoneSignalID = new MediatorLiveData<>();
         mObsPhoneTransportID = new MediatorLiveData<>();
index 0d3abd6..11a8a3a 100644 (file)
@@ -5,7 +5,6 @@ import android.content.BroadcastReceiver;
 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;
@@ -44,18 +43,13 @@ public class TimeDatePresenter extends PresenterCycle {
     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) {
@@ -71,6 +65,7 @@ public class TimeDatePresenter extends PresenterCycle {
     @Override
     public void onPresenterPause() {
         super.onPresenterPause();
+        IcLog.i(TAG, "onPresenterPause");
         if (mAnalogClock) {
             if (mLoopSecond != null) {
                 mLoopSecond.pauseQueryThread();
@@ -81,10 +76,12 @@ public class TimeDatePresenter extends PresenterCycle {
     @Override
     public void onPresenterDestroy() {
         super.onPresenterDestroy();
-        unRegisterTimeDateReceiver();
+        IcLog.i(TAG, "onPresenterDestroy");
 
         if (loopThread != null) {
             loopThread.interrupt();
+            mLoopSecond = null;
+            loopThread = null;
         }
     }
 
@@ -93,6 +90,7 @@ public class TimeDatePresenter extends PresenterCycle {
     }
 
     public TimeDatePresenter(Context context) {
+        IcLog.i(TAG, "TimeDatePresenter");
         mContext = context;
 
         mObsTime = new MediatorLiveData<>();
@@ -123,7 +121,7 @@ public class TimeDatePresenter extends PresenterCycle {
     }
 
 
-    private void registerTimeDateReceiver() {
+    public void registerTimeDateReceiver() {
         IntentFilter filter = new IntentFilter();
         filter.addAction(Intent.ACTION_TIME_TICK);
         filter.addAction(Intent.ACTION_TIME_CHANGED);
@@ -131,7 +129,7 @@ public class TimeDatePresenter extends PresenterCycle {
         mContext.registerReceiver(mIntentReceiver, filter);
     }
 
-    private void unRegisterTimeDateReceiver() {
+    public void unRegisterTimeDateReceiver() {
         try {
             mContext.unregisterReceiver(mIntentReceiver);
         } catch (IllegalArgumentException e) {
@@ -197,11 +195,11 @@ public class TimeDatePresenter extends PresenterCycle {
                 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
@@ -214,7 +212,8 @@ public class TimeDatePresenter extends PresenterCycle {
     private class LoopSecondThread extends QueryThread {
         @Override
         void onThreadExecute() {
-            if(secondMessage != null){
+            if (secondMessage != null) {
+                IcLog.i(TAG, "LoopSecondThread....................");
                 secondMessage.sendEmptyMessage(1);
             }
         }
index 66d3ba2..492a877 100644 (file)
@@ -3,6 +3,8 @@ package com.ic.launcher.widget;
 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;
@@ -21,7 +23,6 @@ public class ClockDrawableView extends View {
     private int mDialWidth;
     private int mDialHeight;
 
-
     private float mMinutes;
     private float mHour;
     private float mSecond;
@@ -29,6 +30,8 @@ public class ClockDrawableView extends View {
     private int rX;
     private int rY;
 
+    private PaintFlagsDrawFilter filter;
+
     public ClockDrawableView(Context context) {
         this(context, null);
     }
@@ -60,6 +63,8 @@ public class ClockDrawableView extends View {
 
             rX = mDialWidth / 2;
             rY = mDialHeight / 2;
+
+            filter = new PaintFlagsDrawFilter(0, Paint.FILTER_BITMAP_FLAG);
         }
     }
 
@@ -103,6 +108,8 @@ public class ClockDrawableView extends View {
     @Override
     protected void onDraw(Canvas canvas) {
         super.onDraw(canvas);
+
+        canvas.setDrawFilter(filter);
         //绘制小时
         drawCustomDrawable(canvas, mHourHand, rX, rY, mHour / 12.0f * 360.0f);
         //绘制分钟
index 8f7fa81..21ee3ab 100644 (file)
@@ -25,6 +25,7 @@
         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
index 66ab9d7..c58e020 100644 (file)
@@ -1,2 +1,2 @@
-#Sun Mar 29 18:27:02 CST 2020
-VERSION_CODE=24
+#Mon Mar 30 10:44:50 CST 2020
+VERSION_CODE=25