diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be245d6..12744b3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -27,6 +27,7 @@ + diff --git a/app/src/main/java/com/ik/mboxlauncher/ui/CategoryActivity.java b/app/src/main/java/com/ik/mboxlauncher/ui/CategoryActivity.java index 55a65ac..78b1706 100644 --- a/app/src/main/java/com/ik/mboxlauncher/ui/CategoryActivity.java +++ b/app/src/main/java/com/ik/mboxlauncher/ui/CategoryActivity.java @@ -10,6 +10,7 @@ import android.view.View; import com.android.device.MediaStateChangeObserver; import com.android.eventbaus.MessageEvent; import com.android.util.LogUtils; +import com.android.util.SharedPreferencesUtil; import com.ik.mboxlauncher.R; import com.ik.mboxlauncher.ui.base.FragmentActivity; import com.ik.mboxlauncher.ui.fragment.AppsFragment; @@ -73,6 +74,11 @@ public class CategoryActivity extends FragmentActivity { return null; } + @Override + public void setFragmentsDisableRefreshDataFlag() { + FragmentManager.getInstance().pressBackUpdateAllFragmentDisableRefreshDataFlag(); + } + @Override public void popBackStackFragment() { @@ -94,9 +100,24 @@ public class CategoryActivity extends FragmentActivity { } + @Override + protected void onResume() { + super.onResume(); + onResumeResetDisableFreshDataFlag(); + } + + private void onResumeResetDisableFreshDataFlag() { + if(SharedPreferencesUtil.getSharePrefrencesBoolean(this,SharedPreferencesUtil.CONFIG_RESET_DISABLE_FRESHDATA_FLAG)){ + SharedPreferencesUtil.setSharePrefrencesBoolean(this,SharedPreferencesUtil.CONFIG_RESET_DISABLE_FRESHDATA_FLAG,false); + FragmentManager.getInstance().pressBackUpdateAllFragmentDisableRefreshDataFlag(); + if(currentFragment!=null){ + currentFragment.onResumeFragment(new MessageEvent()); + } + } + } -// public void setPopWindow(int top, int bottom){ + // public void setPopWindow(int top, int bottom){ // View view = this.getWindow().getDecorView(); // view.layout(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); // view.setDrawingCacheEnabled(true); @@ -122,6 +143,7 @@ public class CategoryActivity extends FragmentActivity { @Override protected void onDestroy() { + FragmentManager.getInstance().destory(); super.onDestroy(); } @@ -135,10 +157,16 @@ public class CategoryActivity extends FragmentActivity { if(currentFragment.onKeyDown(keyCode,event)){ return true; }else { - currentFragment.resetDisableRefreshDataFlag(); + //currentFragment.resetDisableRefreshDataFlag(); + FragmentManager.getInstance().pressBackUpdateAllFragmentDisableRefreshDataFlag(); return super.onKeyDown(keyCode,event); } } + if(keyCode==KeyEvent.KEYCODE_HOME){ + LogUtils.loge("onKeyDown===>KEYCODE_HOME"); + currentFragment.onDetach(); + FragmentManager.getInstance().pressBackUpdateAllFragmentDisableRefreshDataFlag(); + } return super.onKeyDown(keyCode,event); } diff --git a/app/src/main/java/com/ik/mboxlauncher/ui/FragmentManager.java b/app/src/main/java/com/ik/mboxlauncher/ui/FragmentManager.java index 90de369..e9e4509 100644 --- a/app/src/main/java/com/ik/mboxlauncher/ui/FragmentManager.java +++ b/app/src/main/java/com/ik/mboxlauncher/ui/FragmentManager.java @@ -2,6 +2,7 @@ package com.ik.mboxlauncher.ui; import android.content.Context; +import com.android.util.LogUtils; import com.ik.mboxlauncher.ui.base.BaseFragment; import com.ik.mboxlauncher.ui.base.NotifyInterface; import com.ik.mboxlauncher.ui.fragment.AppsFragment; @@ -55,9 +56,10 @@ public class FragmentManager { public static void init(Context context, NotifyInterface notifyInterface){ if(mInstance==null){ + LogUtils.loge("FragmentManager init null"); mInstance = new FragmentManager(context,notifyInterface); } - + LogUtils.loge("FragmentManager init end"); } public static FragmentManager getInstance(){ @@ -82,6 +84,25 @@ public class FragmentManager { return null; } public void destory(){ + // 清空所有 Fragment 引用 + if(mAppsFragment != null) { + mAppsFragment = null; + } + if(mLocalFragment != null) { + mLocalFragment = null; + } + if(mMainFragment != null) { + mMainFragment = null; + } + if(mMusicFragment != null) { + mMusicFragment = null; + } + if(mRecommendFragment != null) { + mRecommendFragment = null; + } + if(mVideoFragment != null) { + mVideoFragment = null; + } mInstance = null; } @@ -91,4 +112,34 @@ public class FragmentManager { } return ""; } + //按返回键 home键 等必须恢复 刷新数据处理 + public void pressBackUpdateAllFragmentDisableRefreshDataFlag(){ + if(mAppsFragment!=null){ + mAppsFragment.resetDisableRefreshDataFlag(); + }else { + LogUtils.loge("mAppsFragment==null"); + } + if(mLocalFragment!=null){ + mLocalFragment.resetDisableRefreshDataFlag(); + }else { + LogUtils.loge("mLocalFragment==null"); + } + if(mVideoFragment!=null){ + mVideoFragment.resetDisableRefreshDataFlag(); + }else { + LogUtils.loge("mVideoFragment==null"); + } + if(mMusicFragment!=null){ + mMusicFragment.resetDisableRefreshDataFlag(); + }else { + LogUtils.loge("mMusicFragment==null"); + } + if(mRecommendFragment!=null){ + mRecommendFragment.resetDisableRefreshDataFlag(); + }else { + LogUtils.loge("mRecommendFragment==null"); + } + } + + } diff --git a/app/src/main/java/com/ik/mboxlauncher/ui/StartupBroadcast.java b/app/src/main/java/com/ik/mboxlauncher/ui/StartupBroadcast.java index 851c707..673e3db 100644 --- a/app/src/main/java/com/ik/mboxlauncher/ui/StartupBroadcast.java +++ b/app/src/main/java/com/ik/mboxlauncher/ui/StartupBroadcast.java @@ -1,6 +1,8 @@ package com.ik.mboxlauncher.ui; +import android.app.ActivityManager; import android.content.BroadcastReceiver; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; @@ -18,6 +20,7 @@ import com.android.nebulasdk.AppManager; import com.android.util.EventBusType; import com.android.util.LogManager; import com.android.util.LogUtils; +import com.android.util.SharedPreferencesUtil; import com.ik.mboxlauncher.SystemService; import java.util.List; @@ -102,10 +105,39 @@ public class StartupBroadcast extends BroadcastReceiver { break; } EventBusUtils.postMsg(messageEvent); - + if(!isTopAppPackage(context)){ + LogUtils.loge("three app activity on top of layer"); + boolean sharePrefrencesBoolean = SharedPreferencesUtil.getSharePrefrencesBoolean(context, SharedPreferencesUtil.CONFIG_RESET_DISABLE_FRESHDATA_FLAG); + if(!sharePrefrencesBoolean){ + SharedPreferencesUtil.setSharePrefrencesBoolean(context,SharedPreferencesUtil.CONFIG_RESET_DISABLE_FRESHDATA_FLAG,true); + } + } } } } + /** + * 获取顶层应用的包名 + * @param context 上下文 + * @return 顶层应用包名,如果获取失败返回 null + */ + public static boolean isTopAppPackage(Context context) { + try { + ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + if (activityManager != null) { + List runningTasks = activityManager.getRunningTasks(1); + if (runningTasks != null && !runningTasks.isEmpty()) { + ActivityManager.RunningTaskInfo taskInfo = runningTasks.get(0); + ComponentName topActivity = taskInfo.topActivity; + LogUtils.loge("topActivity packagename: " + topActivity.getPackageName()); + return topActivity.getPackageName().equalsIgnoreCase(context.getPackageName()); + } + } + } catch (Exception e) { + LogUtils.loge("Error getting top app package name: " + e.getMessage()); + e.printStackTrace(); + } + return true; + } /** * 获取指定包名应用的Launcher Activity信息 diff --git a/app/src/main/java/com/ik/mboxlauncher/ui/base/BaseFragment.java b/app/src/main/java/com/ik/mboxlauncher/ui/base/BaseFragment.java index ad99d93..b096526 100644 --- a/app/src/main/java/com/ik/mboxlauncher/ui/base/BaseFragment.java +++ b/app/src/main/java/com/ik/mboxlauncher/ui/base/BaseFragment.java @@ -27,6 +27,7 @@ import android.view.View; import android.view.ViewGroup; import com.android.eventbaus.MessageEvent; +import com.android.util.LogUtils; /** A fragment which slides when it is entering/exiting. */ public abstract class BaseFragment extends Fragment { @@ -38,6 +39,8 @@ public abstract class BaseFragment extends Fragment { protected static final int MODEL_NORMAL = 0x00; protected static final int MODEL_CUSTOM = 0x01; protected int cuttentModel=MODEL_NORMAL; + private View view; + public NotifyInterface getNotifyInterface() { return notifyInterface; } @@ -110,7 +113,12 @@ public abstract class BaseFragment extends Fragment { @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(getLayoutResourceId(), container, false); + if(view==null){ + view = inflater.inflate(getLayoutResourceId(), container, false); + LogUtils.loge("onCreateView()==>view=null"+getClass().getSimpleName()); + }else { + LogUtils.loge("onCreateView()==>view!=null"+getClass().getSimpleName()); + } initView( view); handler.post(inidataRunnable); return view; diff --git a/app/src/main/java/com/ik/mboxlauncher/ui/base/FragmentActivity.java b/app/src/main/java/com/ik/mboxlauncher/ui/base/FragmentActivity.java index d265f64..71dd5d7 100644 --- a/app/src/main/java/com/ik/mboxlauncher/ui/base/FragmentActivity.java +++ b/app/src/main/java/com/ik/mboxlauncher/ui/base/FragmentActivity.java @@ -23,6 +23,7 @@ import android.app.FragmentTransaction; import android.os.Bundle; import com.android.eventbaus.MessageEvent; +import com.android.util.LogUtils; /** @@ -42,16 +43,19 @@ public abstract class FragmentActivity extends BaseActivity implements NotifyInt protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getlayoutId()); + if (savedInstanceState == null) { + LogUtils.loge("savedInstanceState===>null"); + showInitialFragment(); + } else { + mShowInitialFragment = false; + LogUtils.loge("savedInstanceState===>not null"); + } mFragmentManager = getFragmentManager(); initView(); initData(); // Show initial fragment only when the saved state is not restored, because the last // fragment is restored if savesInstanceState is not null. - if (savedInstanceState == null) { - showInitialFragment(); - } else { - mShowInitialFragment = false; - } + } @@ -95,10 +99,11 @@ public abstract class FragmentActivity extends BaseActivity implements NotifyInt protected FragmentTransaction showFragment(Fragment fragment, boolean addToBackStack) { currentFragment = (BaseFragment) fragment; currentFragment.setNotifyInterface(this); + LogUtils.loge("showFragment===>mFragmentManager1"); if (mFragmentManager == null) { return null; } - + LogUtils.loge("showFragment===>mFragmentManager2"); FragmentTransaction ft = mFragmentManager.beginTransaction(); // ft.setCustomAnimations( // R.anim.slide_left_in, @@ -128,6 +133,7 @@ public abstract class FragmentActivity extends BaseActivity implements NotifyInt } if (!fragment.isAdded()) { ft.replace(getFramlayoutId(), fragment, tag).commit(); + LogUtils.loge("showFragment===>replace"); } else { ft.show(fragment).commit(); } @@ -139,7 +145,9 @@ public abstract class FragmentActivity extends BaseActivity implements NotifyInt @Override public void onMessageEvent(MessageEvent event) { super.onMessageEvent(event); -// if(MessageEvent.ACTION_UPADATE_DATA_SOURCE.equals(event.action)){ + if(MessageEvent.ACTION_UPADATE_APPS_SOURCE.equals(event.action)){ + setFragmentsDisableRefreshDataFlag(); + } // 更新UI if(currentFragment!=null){ currentFragment.onResumeFragment(event); @@ -147,7 +155,7 @@ public abstract class FragmentActivity extends BaseActivity implements NotifyInt // } } - + public abstract void setFragmentsDisableRefreshDataFlag(); protected boolean isShowDisplay() { int count = mFragmentManager.getBackStackEntryCount(); if (count > 0) { diff --git a/app/src/main/java/com/ik/mboxlauncher/ui/fragment/RecommendFragment.java b/app/src/main/java/com/ik/mboxlauncher/ui/fragment/RecommendFragment.java index f904b1d..ae7dd74 100644 --- a/app/src/main/java/com/ik/mboxlauncher/ui/fragment/RecommendFragment.java +++ b/app/src/main/java/com/ik/mboxlauncher/ui/fragment/RecommendFragment.java @@ -161,6 +161,7 @@ public class RecommendFragment extends CategoryFragment { @Override public void onResumeFragment(MessageEvent event) { super.onResumeFragment(event); + disableFreshData=false; loadAppInfoByCategory(AppManager.CATEGORY_RECOMMEND);//重新加载数据 } } diff --git a/app/src/main/java/com/ik/mboxlauncher/ui/fragment/VideoFragment.java b/app/src/main/java/com/ik/mboxlauncher/ui/fragment/VideoFragment.java index 3650b4d..b2ffb57 100644 --- a/app/src/main/java/com/ik/mboxlauncher/ui/fragment/VideoFragment.java +++ b/app/src/main/java/com/ik/mboxlauncher/ui/fragment/VideoFragment.java @@ -130,6 +130,7 @@ public class VideoFragment extends CategoryFragment { @Override protected void initData() { + LogUtils.loge("VideoFragment===>initData()"); loadAppInfoByCategory(AppManager.CATEGORY_VIDEO); } @@ -160,6 +161,7 @@ public class VideoFragment extends CategoryFragment { @Override public void onResumeFragment(MessageEvent event) { super.onResumeFragment(event); + LogUtils.loge("VideoFragment===>onResumeFragment()"); disableFreshData=false; loadAppInfoByCategory(AppManager.CATEGORY_VIDEO);//重新加载数据 } diff --git a/mylibrary/src/main/java/com/android/util/SharedPreferencesUtil.java b/mylibrary/src/main/java/com/android/util/SharedPreferencesUtil.java index 31727a9..216f72e 100644 --- a/mylibrary/src/main/java/com/android/util/SharedPreferencesUtil.java +++ b/mylibrary/src/main/java/com/android/util/SharedPreferencesUtil.java @@ -29,7 +29,7 @@ public class SharedPreferencesUtil { public static final String CONFIG_LOCAL_BOOKMARK_APP="config_local_bookmark_app";//本地配置 收藏夹 public static final String CONFIG_NET_DEFEND_BOOKMARK_APP="config_net_defend_bookmark_app";//网络隔离 收藏夹 - + public static final String CONFIG_RESET_DISABLE_FRESHDATA_FLAG="config_reset_disable_freshdata_flag";//重置设备禁止刷新数据为true可刷新 public static String getSharePrefrencesString(Context context,String key){ SharedPreferences sharedPreferences=context.getSharedPreferences(SHARE_NAME,0);