OS:MTK 8.1

需求:所有应用在workspaces上展示

1.首先添加一个标志位
  • packages/apps/Launcher3/src/com/android/launcher3/config/BaseFlags.java
  // Feature to control launcher drawer  public static final boolean REMOVE_DRAWER = true;
2.所有应用在workspaces上展示

2.1 加载所有安装应用到workspace

  • packages/apps/Launcher3/src/com/android/launcher3/model/LoaderTask.java
 // second step if (DEBUG_LOADERS) Log.d(TAG, "step 2.1: loading all apps"); loadAllApps(); // add  if (FeatureFlags.REMOVE_DRAWER && (mBgAllAppsList.data.size() > 0)) {     ArrayList<AppInfo> appInfos = new ArrayList<AppInfo>(mBgAllAppsList.data);     mApp.getModel().addAndBindAddedWorkspaceItems(new LzyProvider(appInfos)); } // end if (DEBUG_LOADERS) Log.d(TAG, "step 2.2: Binding all apps");  // 添加自定义Provider  参考InstallShortcutReceiver中provider写法  // add  private static class LzyProvider extends Provider<List<Pair<ItemInfo, Object>>> {     private  ArrayList<AppInfo> mItems;     public LzyProvider(ArrayList<AppInfo> items) {            mItems = items;     }     @Override     public ArrayList<Pair<ItemInfo, Object>> get() {       ArrayList<Pair<ItemInfo, Object>> installQueue = new ArrayList<>();       for (AppInfo info : mItems ) {            ShortcutInfo si = info.makeShortcut();            installQueue.add(Pair.create((ItemInfo) si, null));       }       return installQueue;     }  }  // end

2.2 有app变化时,更新workspace

  • packages/apps/Launcher3/src/com/android/launcher3/model/PackageUpdatedTask.java
 final ArrayList<AppInfo> addedOrModified = new ArrayList<>();       addedOrModified.addAll(appsList.added);         appsList.added.clear();         addedOrModified.addAll(appsList.modified);         appsList.modified.clear();         // add  在此处按照LoaderTask.java中添加         
  • packages/apps/Launcher3/src/com/android/launcher3/model/BaseModelUpdateTask.java
 @Override public final void run() {   if (!mModel.isModelLoaded()) {       if (DEBUG_TASKS) {           Log.d(TAG, "Ignoring model task since loader is pending=" + this);       }       // Loader has not yet run.       // add       if (!FeatureFlags.REMOVE_DRAWER) {           return;       }       // end   }   execute(mApp, mDataModel, mAllAppsList); }
3.去掉qsb
  • packages/apps/Launcher3/src/com/android/launcher3/Workspace.java
 注释掉下面这段代码 if(!FeatureFlags.REMOVE_DRAWER){ // Always add a QSB on the first screen. if (qsb == null) {  // In transposed layout, we add the QSB in the Grid. As workspace does not touch the     // edges, we do not need a full width QSB.     qsb = LayoutInflater.from(getContext())                  .inflate(R.layout.search_container_workspace,firstPage, false);  }  CellLayout.LayoutParams lp = new CellLayout.LayoutParams(0, 0, firstPage.getCountX(), 1);  lp.canReorder = false;  if (!firstPage.addViewToCellLayout(qsb, 0, R.id.search_container_workspace, lp, true)) {      Log.e(TAG, "Failed to add to item at (0, 0) to CellLayout");  } }
4.去掉hotseat
  • packages/apps/Launcher3/src/com/android/launcher3/DeviceProfile.java
  // add  if (FeatureFlags.REMOVE_DRAWER) {      lp.height = 0;  }  // end  hotseat.setLayoutParams(lp);
5.隐藏allapps button
  • packages/apps/Launcher3/src/com/android/launcher3/pageindicators/PageIndicatorLineCaret.java
 @Override protected void onFinishInflate() {   super.onFinishInflate();   mAllAppsHandle = (ImageView) findViewById(R.id.all_apps_handle);   mAllAppsHandle.setVisibility(View.GONE);     //  add for hide allapp button   ... }
6.去掉滑动显示allapp

隐藏了allapp按钮,此时在屏幕上滑还是可以展示allapp

  • packages/apps/Launcher3/src/com/android/launcher3/allapps/AllAppsTransitionController.java
 @Override public boolean onDrag(float displacement, float velocity) {   if (mAppsView == null) {       return false;   // early termination.   }   // add by   if (FeatureFlags.REMOVE_DRAWER) {       return false;   }   // end    mContainerVelocity = velocity;   float shift = Math.min(Math.max(0, mShiftStart + displacement), mShiftRange);   setProgress(shift / mShiftRange); // 滑动时设置allapp从底部显示一点 } @Override public void onDragEnd(float velocity, boolean fling) {   if (mAppsView == null) {       return; // early termination.   }   // add     if (FeatureFlags.REMOVE_DRAWER) {       return;   }   // end   final int containerType = mTouchEventStartedOnHotseat                 ? ContainerType.HOTSEAT : ContainerType.WORKSPACE;   if (fling) {       ...       mLauncher.showAppsView(true /* animated */, false /* updatePredictedApps */);       ...   } }

手指在屏幕移动,onDrag方法会先设置allapp显示出来一点,在onDragEnd方法中判断if(fling)是滑动,就会调用showAppsView()方法,和点击allapp走一样的流程

7.所有应用在workspace第一页中显示

修改之后看效果,发现应用icon都是在第二页中显示,除了默认的几个icon在第一页

  • packages/apps/Launcher3/src/com/android/launcher3/model/AddWorkspaceItemsTask.java
  int screenCount = workspaceScreens.size();  // First check the preferred screen.       // add by   // int preferredScreenIndex = workspaceScreens.isEmpty() ? 0 : 1;     int preferredScreenIndex = 0;  //end  if (preferredScreenIndex < screenCount) {
8.hotseat中应用的icon不能被添加到workspace

所有应用可以再第一页显示,但是发现少了几个应用的icon,开始没注意到是hotseat中的几个应用,后面抓log发现,loadworkspace时会做判断,dw_phone_hotseat.xml中标记-101,不会添加,具体代码在 LoadCursor中
注释掉dw_phone_hotseat.xml中的代码

9.修改workspace行列
  • packages/apps/Launcher3/src/com/android/launcher3/InvariantDeviceProfile.java
 // add  //numRows = closestProfile.numRows;  //numColumns = closestProfile.numColumns;  numRows = 4;  numColumns = 3; // end
10.onResume状态时,HotSeat和这个箭头会一起做一个向上跳动的动画
  • packages/apps/Launcher3/src/com/android/launcher3/Launcher.java
... if (shouldShowDiscoveryBounce()) {//注释 begin// mAllAppsController.showDiscoveryBounce();//注释 end } if (mLauncherCallbacks != null) {     mLauncherCallbacks.onResume(); }       ...

参考博文:Android8.1 Launcher3 去掉抽屉

更多相关文章

  1. adb server is out of date. killing...
  2. android 程序中选择图片的代码
  3. Android实现高斯模糊
  4. android ListView添加checkbox注意事项
  5. [Android]单元测试实例
  6. android DrawerLayout 点击穿透、点击自身消失等问题解决
  7. 【高通SDM660平台 Android(安卓)10.0】(20) --- Actuator 与 Ker
  8. 菜鸟的安卓实习之路---- 如何实现android恢复出厂设置
  9. Android(安卓)Handler 分析

随机推荐

  1. Activity 属性设置参数说明
  2. android应用程序跳转到系统的各个设置页
  3. Android(安卓)API中文文档(111) ―― Mai
  4. Android的消息机制的总体流程
  5. Android访问WCF(下篇)-客户端开发
  6. Android基础篇之Android快速入门--你必须
  7. Android(安卓)mediaserver占用CPU过高的
  8. Android自定义标题栏
  9. Android(安卓)实现沉浸式只需一行代码
  10. 第99章、Android调用Javascript(从零开始