Android8.1 Launcher 3引き出しを外す(一)

6672 ワード

Android8.1 Launcher 3引き出しを外す(一)
現在の需要は8.1のlauncherを国内でよく見られるように修正し、すべてのappをworkspaceに表示することですが、ネットで調べてみると、この方面の資料が見つからず、自分でゆっくり見るしかありません.このブログを記録してください.1: Launcher3\src\com\android\launcher3\LauncherAppState.JAva:メソッドを追加します.
 public static boolean isDisableAllApps() {
        return true;
    }

2: Launcher3\src\com\android\launcher3\InvariantDeviceProfile.JAva->isAllAppsButtonRank():6.0で、この方法はHotSeat.JAvaで
public boolean isAllAppsButtonRank(int rank) {
        if (LauncherAppState.isDisableAllApps()) {
            return false;
        }
        return rank == getAllAppsButtonRank();
    }

3:HotSeatでAllappキーのロードLauncher 3srccomandroidlauncher 3HotSeatを外す.java –>resetLayout():
void resetLayout() {
        mContent.removeAllViewsInLayout();
        //    
        if (LauncherAppState.isDisableAllApps()) {
            return;
        }

        if (!FeatureFlags.NO_ALL_APPS_ICON) {
            // Add the Apps button
            Context context = getContext();
            DeviceProfile grid = mLauncher.getDeviceProfile();
            int allAppsButtonRank = grid.inv.getAllAppsButtonRank();
        ......
}

4:すべてのアプリケーションを第1層Launcher 3srccomandroidlauncher 3modelLoaderTaskに配置する.java –> run();
......
           // second step
            if (DEBUG_LOADERS) Log.d(TAG, "step 2.1: loading all apps");
            loadAllApps();
            //    APP
            if (LauncherAppState.isDisableAllApps()) {
                verifyApplications();
            }
            if (DEBUG_LOADERS) Log.d(TAG, "step 2.2: Binding all apps");
            verifyNotStopped();
            mResults.bindAllApps();
......

verifyApplications()の追加:
private void verifyApplications() {
        final Context context = mApp.getContext();
        ArrayList.PendingInstallShortcutInfo> items = new ArrayList<>();
        synchronized (this) {
            for (AppInfo app : mBgAllAppsList.data) {
                Intent data = app.getIntent();
                data.putExtra(Intent.EXTRA_SHORTCUT_INTENT, data);
                data.putExtra(Intent.EXTRA_SHORTCUT_ICON, app.iconBitmap);
                data.putExtra(Intent.EXTRA_SHORTCUT_NAME, app.title);
                InstallShortcutReceiver.PendingInstallShortcutInfo info = new InstallShortcutReceiver.PendingInstallShortcutInfo(
                        data, app.user, context);
                items.add(info);

            }
        }
        if (!items.isEmpty()) {
            mApp.getModel().addAndBindAddedWorkspaceItems(
                    new InstallShortcutReceiver.LazyShortcutsProvider(context.getApplicationContext(), items));
        }
    }

必要なのはPendingInstallShortcutInfoとInstallShortcutReceiver.LazyShortcutsProviderをpublicに変更しました.ここまで来れば初歩的にいいです.しかし、運行してみたらまだだめだった.そこでlogを印刷して問題を探します;AddWorkspaceを見つけたJAvaのexecute()メソッドは、BaseModelUpdateTaskのため実行されていません.JAvaのrun()の判断問題は、実行されていないため、怠け者になって、まずreturnを注釈します.
@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.
            return;
        }
        execute(mApp, mDataModel, mAllAppsList);
    }

やっと引き出しのappをworkspaceに入れて、次は最適化して引き出しを隠すことができて、8.1の上で滑っても引き出しを呼び出すことができるので、これはまだ研究しています.次のタスクは依然として楽ではありません.また、新しいアプリケーションが追加されたときにWorkspaceを更新し、時間通りに削除するオプションを削除し、引き出しの表示を禁止する必要があります.本文はこのブログを参考にした:Android 7.0 Launcher 3はアプリケーションの引き出しを取り除くが、このブログは7.0に基づいており、8.1とは少し異なり、特にアプリケーションをロードする場所(LoaderTask.java)である.