This commit is contained in:
wangcongtao
2020-10-20 10:03:11 +08:00
parent 7cc699e251
commit 2ecf7d2a48
16 changed files with 184 additions and 116 deletions

View File

@@ -1,12 +1,11 @@
package com.mogo.module.apps;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.text.TextUtils;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.module.common.utils.CarSeries;
import com.mogo.utils.FileUtils;
import java.io.BufferedReader;
import java.io.File;
@@ -22,34 +21,28 @@ import java.util.List;
* <p>
* 过滤 app
*/
public class AppFilterImpl implements AppFilter {
public class AppFilterImpl {
private final Context mContext;
private List< String > mFilterPackages;
private static List< String > mFilterPackages;
private static String sExternalPath = "/system/etc/packagesFilterList.txt";
private static List< String > sExternalConfigPackages = new ArrayList<>();
public AppFilterImpl( Context context ) {
mContext = context;
static {
if ( CarSeries.getSeries() != CarSeries.CAR_SERIES_F80X ) {
final String[] values = context.getResources().getStringArray( R.array.module_apps_array_filter_packages );
final String[] values = AbsMogoApplication.getApp().getResources().getStringArray( R.array.module_apps_array_filter_packages );
if ( values != null ) {
mFilterPackages = new ArrayList( Arrays.asList( values ) );
}
} else {
final String[] values = context.getResources().getStringArray( R.array.module_apps_array_filter_packages_f );
final String[] values = AbsMogoApplication.getApp().getResources().getStringArray( R.array.module_apps_array_filter_packages_f );
if ( values != null ) {
mFilterPackages = new ArrayList( Arrays.asList( values ) );
}
}
}
@Override
public boolean filter( PackageInfo packageInfo ) {
// if ( isSystemApp( packageInfo ) ) {
// return true;
// }
public static boolean sFilter( PackageInfo packageInfo ) {
if ( isInExternalFilter( packageInfo ) ) {
return true;
}
@@ -62,19 +55,19 @@ public class AppFilterImpl implements AppFilter {
return false;
}
private boolean isSystemApp( PackageInfo packageInfo ) {
private static boolean isSystemApp( PackageInfo packageInfo ) {
return ( packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM ) != 0;
}
private boolean isFilterPackages( PackageInfo packageInfo ) {
private static boolean isFilterPackages( PackageInfo packageInfo ) {
return mFilterPackages.contains( packageInfo.packageName );
}
private boolean noLaunchIntent( PackageInfo packageInfo ) {
return mContext.getPackageManager().getLaunchIntentForPackage( packageInfo.packageName ) == null;
private static boolean noLaunchIntent( PackageInfo packageInfo ) {
return AbsMogoApplication.getApp().getPackageManager().getLaunchIntentForPackage( packageInfo.packageName ) == null;
}
private boolean isInExternalFilter( PackageInfo packageInfo ) {
private static boolean isInExternalFilter( PackageInfo packageInfo ) {
return sExternalConfigPackages.contains( packageInfo.packageName );
}

View File

@@ -2,19 +2,17 @@ package com.mogo.module.apps;
import android.os.Bundle;
import android.view.View;
import android.view.animation.DecelerateInterpolator;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewpager.widget.ViewPager;
import com.mogo.commons.mvp.MvpFragment;
import com.mogo.commons.utils.ViewPagerSpeedScroller;
import com.mogo.module.apps.model.AppInfo;
import com.mogo.module.apps.view.GridViewPagerScroller;
import com.mogo.module.apps.view.PagerSlidingTabStripV2;
import com.mogo.utils.logger.Logger;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;
@@ -36,8 +34,6 @@ public class AppsFragment extends MvpFragment< AppsView, AppsPresenter > impleme
private View mLoadingView;
private PagerSlidingTabStripV2 mIndicator;
private GridViewPagerScroller mScroller;
@Override
protected int getLayoutId() {
return R.layout.module_apps_fragment_apps;
@@ -58,19 +54,7 @@ public class AppsFragment extends MvpFragment< AppsView, AppsPresenter > impleme
mIndicator = findViewById( R.id.module_apps_id_indicator );
mIndicator.setOpenPadding( true );
try {
Field mField = ViewPager.class.getDeclaredField("mScroller");
mField.setAccessible(true);
mScroller = new GridViewPagerScroller(getContext(), new DecelerateInterpolator());
mField.set(mAppsPager, mScroller);
mScroller.setDuration(160);
Field field = ViewPager.class.getDeclaredField("mTouchSlop");
field.setAccessible(true);
field.setInt(mAppsPager, 4);
} catch (Exception e) {
e.printStackTrace();
}
ViewPagerSpeedScroller.attach(getContext(), mAppsPager, 1000);
}
@NonNull
@@ -109,34 +93,6 @@ public class AppsFragment extends MvpFragment< AppsView, AppsPresenter > impleme
}
}
// @Override
// public Animation onCreateAnimation( int transit, boolean enter, int nextAnim ) {
// TranslateAnimation animation = null;
// if ( transit == FragmentTransaction.TRANSIT_FRAGMENT_OPEN ) {
// if ( enter ) {
// animation = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0,
// Animation.RELATIVE_TO_SELF, 1, Animation.RELATIVE_TO_SELF, 0 );
// } else {
// animation = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, -1,
// Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0 );
// }
// } else if ( FragmentTransaction.TRANSIT_FRAGMENT_CLOSE == transit ) {
// if ( enter ) {
// animation = new TranslateAnimation( Animation.RELATIVE_TO_SELF, -1, Animation.RELATIVE_TO_SELF, 0,
// Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0 );
// } else {
// animation = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1,
// Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0 );
// }
// }
// if ( animation == null ) {
// animation = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0,
// Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1 );
// }
// animation.setDuration( 300 );
// return animation;
// }
@Override
public void onDestroyView() {
super.onDestroyView();

View File

@@ -6,7 +6,6 @@ import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import com.mogo.module.apps.AppFilter;
import com.mogo.module.apps.AppFilterImpl;
import com.mogo.module.apps.AppsConst;
import com.mogo.module.apps.AppsListChangedLiveData;
@@ -31,8 +30,6 @@ public class AppsModel {
private static volatile AppsModel sInstance;
private Context mContext;
private AppFilter mAppFilter;
private Map< Integer, List< AppInfo > > mPagedApps = new HashMap<>();
private AppsModel( Context context ) {
@@ -58,7 +55,6 @@ public class AppsModel {
mPagedApps.clear();
}
mContext = null;
mAppFilter = null;
sInstance = null;
}
@@ -69,9 +65,6 @@ public class AppsModel {
}
return;
}
if ( mAppFilter == null ) {
mAppFilter = new AppFilterImpl( mContext );
}
try {
AppFilterImpl.loadExternalFilterPackagesList();
} catch ( Exception e ) {
@@ -83,7 +76,7 @@ public class AppsModel {
int counter = 0;
for ( int i = 0; i < packages.size(); ++i ) {
PackageInfo packageInfo = packages.get( i );
if ( mAppFilter.filter( packageInfo ) ) {
if ( AppFilterImpl.sFilter( packageInfo ) ) {
continue;
}
int page = counter++ / AppsConst.TOTAL_SIZE_EACH_PAGE;
@@ -118,13 +111,10 @@ public class AppsModel {
if ( mPagedApps == null || mPagedApps.isEmpty() ) {
return;
}
if ( mAppFilter == null ) {
mAppFilter = new AppFilterImpl( mContext );
}
try {
final PackageManager packageManager = mContext.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo( packageName, 0 );
if ( !mAppFilter.filter( packageInfo ) ) {
if ( !AppFilterImpl.sFilter( packageInfo ) ) {
String appName = getApplicationName( packageManager, packageInfo );
String versionName = packageInfo.versionName;
int versionCode = packageInfo.versionCode;
@@ -157,7 +147,7 @@ public class AppsModel {
return 0;
} else {
if ( mPagedApps.get( totalPages - 1 ) == null
|| mPagedApps.get( totalPages - 1 ).size() == AppsConst.TOTAL_SIZE_EACH_PAGE ) {
|| mPagedApps.get( totalPages - 1 ).size() == AppsConst.TOTAL_SIZE_EACH_PAGE ) {
return totalPages;
} else {
return totalPages - 1;

View File

@@ -7,35 +7,19 @@ import android.view.WindowManager;
import com.mogo.commons.AbsMogoApplication;
import com.mogo.module.common.wm.WindowManagerView;
import com.mogo.service.IMogoServiceApis;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.service.statusmanager.IMogoStatusManager;
import com.mogo.utils.logger.Logger;
public class BackToMainHomeManager {
private static final String TAG = "BackToMainHomeManager";
private static IMogoFragmentManager mFragmentManager;
private static IMogoStatusManager mStatusManager;
private static IMogoServiceApis mApis;
public static void init( IMogoServiceApis apis ) {
mApis = apis;
mFragmentManager = apis.getFragmentManagerApi();
mStatusManager = apis.getStatusManagerApi();
}
public static void backToLauncher() {
if ( mStatusManager == null ) {
Logger.e( TAG, "未初始化完成" );
return;
}
if ( mStatusManager.isMainPageOnResume() ) {
if ( mStatusManager.isSearchUIShow() ) {
mFragmentManager.clearAll();
}
return;
}
Intent intent2 = new Intent();
// 是否发自系统消息
@@ -63,21 +47,22 @@ public class BackToMainHomeManager {
.size( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT )
.gravity( Gravity.LEFT | Gravity.TOP )
.showInWindowManager();
mWindowManagerView.attachTouchEvent( (view, xPos, yPos) -> {
mWindowManagerView.attachTouchEvent( ( view, xPos, yPos ) -> {
backToLauncher();
} );
}
try {
}
public static void showFloatButton() {
if ( mWindowManagerView != null && !mWindowManagerView.isShowing() ) {
mWindowManagerView.show();
} catch ( Exception e ) {
e.printStackTrace();
}
}
public static void removeMainHomeView() {
if ( mWindowManagerView != null ) {
public static void hideFloatButton() {
if ( mWindowManagerView != null && mWindowManagerView.isShowing() ) {
mWindowManagerView.dismiss();
}
}
}

View File

@@ -20,6 +20,15 @@ public class MogoLauncher implements IMogoLauncher {
BackToMainHomeManager.backToLauncher();
}
@Override
public void setFloatButtonVisible( boolean visible ) {
if ( visible ) {
BackToMainHomeManager.showFloatButton();
} else {
BackToMainHomeManager.hideFloatButton();
}
}
@Override
public void init( Context context ) {

View File

@@ -233,9 +233,7 @@ public class EntranceFragment extends MvpFragment<EntranceView, EntrancePresente
mStatusManager.setDisplayOverview(TAG, false);
UiThreadHandler.removeCallbacks(mLockCarRunnable);
}
mMApUIController.changeZoom( 16 );
// mMApUIController.recoverLockMode();
// mApis.getRefreshStrategyControllerApi().restartAutoRefreshAtTime( 0 );
mApis.getRefreshStrategyControllerApi().restartAutoRefreshAtTime( 0 );
}
} );

View File

@@ -282,6 +282,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
if ( mCoverUpLayout.getVisibility() != View.VISIBLE ) {
mServiceApis.getAdasControllerApi().showADAS();
}
mServiceApis.getLauncherApi().setFloatButtonVisible( false );
}
@Override
@@ -293,6 +294,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
if ( shouldCloseADASPanelWhenPause() ) {
mServiceApis.getAdasControllerApi().closeADAS();
}
mServiceApis.getLauncherApi().setFloatButtonVisible( true );
}
protected boolean shouldCloseADASPanelWhenPause() {

View File

@@ -224,7 +224,7 @@ public class MogoServices implements IMogoMapListener,
}
mStatusManager.setUserInteractionStatus( ServiceConst.TYPE, true, false );
mUiController.changeZoom( ServiceConst.DEFAULT_LOCK_CAR_ZOOM_LEVEL );
mUiController.setLockZoom( ServiceConst.DEFAULT_LOCK_CAR_ZOOM_LEVEL );
// mUiController.setLockZoom( ServiceConst.DEFAULT_LOCK_CAR_ZOOM_LEVEL );
mStatusManager.setUserInteractionStatus( TAG, true, false );
mUiController.recoverLockMode();
notifyRefreshData( mLastAutoRefreshLocation, ServiceConst.DEFAULT_AUTO_REFRESH_DATA_RADIUS, mAutoRefreshCallback );

View File

@@ -3,7 +3,7 @@ package com.mogo.module.service.launchercard;
public class LauncherCardRefreshStrategy {
private long interval; // 间隔时间
private static LauncherCardRefreshType type = LauncherCardRefreshType.OnlineCar;
private LauncherCardRefreshType type = LauncherCardRefreshType.OnlineCar;
private LauncherCardRefreshStrategy next;
@@ -15,6 +15,10 @@ public class LauncherCardRefreshStrategy {
this.msgType = msgType;
}
public void setType( LauncherCardRefreshType type ) {
this.type = type;
}
public int getMsgType() {
return msgType;
}
@@ -24,6 +28,10 @@ public class LauncherCardRefreshStrategy {
}
public LauncherCardRefreshType getType() {
return type;
}
public LauncherCardRefreshType getNextType() {
if ( type == LauncherCardRefreshType.ExploreWay ) {
type = LauncherCardRefreshType.OnlineCar;
} else {
@@ -33,7 +41,7 @@ public class LauncherCardRefreshStrategy {
}
public void next(){
getType();
getNextType();
}
public int getLimit() {

View File

@@ -49,6 +49,10 @@ class LauncherCardRefresher {
public static final String KEY_LauncherCardTipCounter = "LauncherCardTipCounter";
public static final String KEY_LauncherCardTipLastTipTime = "LauncherCardTipLastTipTime";
public static final String KEY_LauncherCardExplorerWayAndOnlineCarTipCounter = "LauncherCardExplorerWayAndOnlineCarTipCounter";
public static final String KEY_LauncherCardExplorerWayAndOnlineCarTipLastTipTime = "LauncherCardExplorerWayAndOnlineCarTipLastTipTime";
public static final String KEY_LauncherCardExplorerWayAndOnlineCarTipLastTipType = "LauncherCardExplorerWayAndOnlineCarTipLastTipType";
private static volatile LauncherCardRefresher sInstance;
@@ -159,10 +163,10 @@ class LauncherCardRefresher {
40 * ONE_MINUTE, null, MSG_EXPLORER_WAY_OR_ONLINE_CAR_DATA
);
private LauncherCardRefreshStrategy mInduceStrategy = new LauncherCardRefreshStrategy(
3 * ONE_MINUTE, mExplorerWayOrOnlineCarDataStrategy, MSG_INDUCE
18 * ONE_MINUTE, mExplorerWayOrOnlineCarDataStrategy, MSG_INDUCE
);
private LauncherCardRefreshStrategy mLauncherCardConfigStrategy = new LauncherCardRefreshStrategy(
2 * ONE_MINUTE, mInduceStrategy, MSG_REFRESH_DEFAULT_CARD
2 * ONE_MINUTE, mExplorerWayOrOnlineCarDataStrategy, MSG_REFRESH_DEFAULT_CARD
);
private LauncherCardRefreshStrategy mRefreshStrategy = mLauncherCardConfigStrategy;
@@ -239,15 +243,36 @@ class LauncherCardRefresher {
}
private void handleRefreshExplorerWayOrOnlineCarMsg() {
int counter = SharedPrefsMgr.getInstance( mContext ).getInt( KEY_LauncherCardExplorerWayAndOnlineCarTipCounter, 0 );
if ( counter >= 1 ) {
long lastTipTime = SharedPrefsMgr.getInstance( mContext ).getLong( KEY_LauncherCardExplorerWayAndOnlineCarTipLastTipTime, 0L );
if ( System.currentTimeMillis() - lastTipTime < 3 * ONE_DAY ) {
return;
} else {
SharedPrefsMgr.getInstance( mContext ).putInt( KEY_LauncherCardExplorerWayAndOnlineCarTipCounter, 0 );
counter = 0;
SharedPrefsMgr.getInstance( mContext ).putLong( KEY_LauncherCardExplorerWayAndOnlineCarTipLastTipTime, 0L );
}
}
SharedPrefsMgr.getInstance( mContext ).putInt( KEY_LauncherCardExplorerWayAndOnlineCarTipCounter, ++counter );
SharedPrefsMgr.getInstance( mContext ).putLong( KEY_LauncherCardExplorerWayAndOnlineCarTipLastTipTime, System.currentTimeMillis() );
MogoLocation location = MarkerServiceHandler.getMogoLocationClient().getLastKnowLocation();
if ( location == null ) {
restart();
return;
}
mMsgExplorerWayOrOnlineCarDataCounter++;
if ( mMsgExplorerWayOrOnlineCarDataCounter > 2 ) {
if ( mMsgExplorerWayOrOnlineCarDataCounter > 1 ) {
return;
}
String type = SharedPrefsMgr.getInstance( mContext ).getString( KEY_LauncherCardExplorerWayAndOnlineCarTipLastTipType, LauncherCardRefreshType.ExploreWay.name() );
LauncherCardRefreshType strategy = LauncherCardRefreshType.valueOf( type );
mRefreshStrategy.setType( strategy );
SharedPrefsMgr.getInstance( mContext ).putString( KEY_LauncherCardExplorerWayAndOnlineCarTipLastTipType, mRefreshStrategy.getNextType().name() );
MogoLatLng latLng = new MogoLatLng( location.getLatitude(), location.getLongitude() );
handleRefreshExplorerWayOrOnlineCarData( latLng, mRefreshStrategy.getType() );
}
@@ -369,14 +394,14 @@ class LauncherCardRefresher {
return;
}
if ( mDefaultConfigCounter++ >= 3 ) {
if ( mDefaultConfigCounter++ >= 1 ) {
return;
}
int counter = SharedPrefsMgr.getInstance( mContext ).getInt( KEY_LauncherCardTipCounter, 0 );
if ( counter >= 5 ) {
long lastTipTime = SharedPrefsMgr.getInstance( mContext ).getLong( KEY_LauncherCardTipLastTipTime, 0L );
if ( System.currentTimeMillis() - lastTipTime < 1 * ONE_DAY ) {
if ( System.currentTimeMillis() - lastTipTime < 7 * ONE_DAY ) {
return;
} else {
SharedPrefsMgr.getInstance( mContext ).putInt( KEY_LauncherCardTipCounter, 0 );

View File

@@ -3,7 +3,7 @@
<string name="module_service_app_entrance_text">辅助\n驾驶</string>
<string name="module_service_launcher_card_tips">你的周围有%d个%s请点击查看你也可以对我说打开蘑菇出行</string>
<string name="module_service_launcher_card_info">周围有%d个%s</string>
<string name="module_service_open_app_tip">建议开启蘑菇出行,守护你的每一段行程,你可以直接对我说,打开蘑菇出行</string>
<string name="module_service_open_app_tip">亲,建议您使用蘑菇出行</string>
<string name="module_services_str_20Km_radius">扩大到20KM半径</string>
<string name="module_services_str_40Km_radius">扩大到40KM半径</string>
<string name="module_services_panel_item_distance_tag_text">距离导航目的地</string>