Registro de modificação do Android Launcher

SO : Android 9.0

Fonte: código-fonte do Launcher3

Caminho : packages \ apps \ Launcher3

 

Um, modifique a configuração padrão

1. Modificação do ícone

 

Caminho: xml / device_profiles.xml

    // 1024x600

    <perfil

        lançador: nome = "Nexus 7"

        lançador: minWidthDps = "575"

        lançador: minHeightDps = "904"

        lançador: numRows = "3"            número de ícones de linha

        launcher: numColumns = "4"          o número de ícones de coluna

        lançador: numFolderRows = "4"

        lançador: numFolderColumns = "5"

        lançador: iconSize = tamanho do ícone "80"            

        lançador: iconTextSize = tamanho do texto "20"          

        lançador: numHotseatIcons = "7"

        launcher: defaultLayoutId = "@ xml / default_workspace_5x6"

 

Configurar widgets predefinidos

Caminho: xml / default_workspace_5x6.xml

    <appwidget

        lançador: className = "com.wits.widget.WidgetProvider"

        lançador: packageName = "com.wits.widget"

        lançador: tela = "1"

        lançador: spanX = "4"

        lançador: spanY = "3"

        lançador: x = "0"

        lançador: y = "0" />

 

Configurar ícones predefinidos

Caminho: xml / default_workspace_5x6.xml

 

        <favorito

        iniciador: className = "com.google.android.apps.chrome.Main"

        lançador: packageName = "com.android.chrome"

        iniciador: tela = "2" é                          exibido na segunda tela

        lançador: x = "0"                                                                

        lançador: y = "0" />

 

Configure os APKs para serem filtrados e substitua os ícones personalizados

Como pode haver vários ícones em um APK, filtre e substitua pelo nome da classe.

Caminho: values ​​/ config.xml

<! - inteligência ->

    <! - excluir nome da classe ->

    <string-array name = "exclude_class_list" translatable = "false">

        <item> com.wits.pms.TestActivity </item>  Nome da classe do APK a ser oculto

</string-array>

 

    <! - alterar ícone: ícone de atividade nome da classe ->

    <string-array name = "icon_class_name" translatable = "false">

        <item> com.google.android.apps.chrome.Main </item> o nome da classe correspondente ao ícone personalizado

        <item> com.android.settings.Settings </item>      

    </string-array>

 <! - alterar ícone: ícone @ drawable / theme_play ->                

  <string-array name = "icon_package_png" translatable = "false">  

      <! - google ->                                            

      <item> @ drawable / theme_play </item> a          imagem correspondente ao ícone personalizado              

      <item> @ drawable / theme_google </item>                      

</string-array>   

 

Caminho: com.android.launcher3.uioverrides.AllAppsSwipeController # canInterceptTouch

 

 protected boolean canInterceptTouch (MotionEvent ev) {

...

        if (mLauncher.isInState (ALL_APPS) &&! mLauncher.getAppsView (). shouldContainerScroll (ev)) {

            retorna falso;

        }

        // adicionar início

        if (FeatureFlags.CUSTOM_REMOVE) {

           retorna falso;

        }

        //adendo

        return true;

}

 

Remova a barra inferior do assento quente

Caminho: com.android.launcher3.Hotseat # setInsets

Proteja todos os códigos em setInsets.

 

Remova o widget, pressione e arraste

Caminho: com.android.launcher3.touch.ItemLongClickListener # onWorkspaceItemLongClick

private static boolean onWorkspaceItemLongClick (Exibir v) {

        Launcher launcher = Launcher.getLauncher (v.getContext ());

        if (! canStartDrag (launcher)) return false;

        if (! launcher.isInState (NORMAL) &&! launcher.isInState (OVERVIEW)) return false;

        if (! (v.getTag () instanceof ItemInfo)) return false;

 

        launcher.setWaitingForResult (null);

        // remove o recurso de arrastar do APP WIDGET

        if (FeatureFlags.CUSTOM_REMOVE) {

            if (((ItemInfo) v.getTag ()). itemType == LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET) {

                retorna falso;

            }

        }

                 

        beginDrag (v, launcher, (ItemInfo) v.getTag (), new DragOptions ());

        return true;

}

 

Remova a animação de salto no prompt do hotseat

Caminho: com.android.launcher3.Launcher # onResume

 // remove o animador do hotseat

        if (! FeatureFlags.CUSTOM_REMOVE) {

            DiscoveryBounce.showForHomeIfNeeded (this);

        }

 

Remova o quadro inferior gerado automaticamente pelo ícone do APP

Caminho: com.android.launcher3.graphics.LauncherIcons # normalizeAndWrapToAdaptiveIcon

private Drawable normalizeAndWrapToAdaptiveIcon (ícone Drawable, int iconAppTargetSdk,

            RectF outIconBounds, float [] outScale) {

                        ...

 if ( ! FeatureFlags.CUSTOM_REMOVE && ((Utilities.ATLEAST_OREO && iconAppTargetSdk> = Build.VERSION_CODES.O) ||

                    Utilities.ATLEAST_P)) {

                boolean [] outShape = novo booleano [1];

                if (mWrapperIcon == null) {

                    mWrapperIcon = mContext.getDrawable (R.drawable.adaptive_icon_drawable_wrapper)

                            .mutate ();

                }

                AdaptiveIconDrawable dr = (AdaptiveIconDrawable) mWrapperIcon;

                dr.setBounds (0, 0, 1, 1);

                scale = getNormalizer (). getScale (ícone, outIconBounds, dr.getIconMask (), outShape);

                if (Utilities.ATLEAST_OREO &&! outShape [0] &&! (icon instanceof AdaptiveIconDrawable)) {

                    FixedScaleDrawable fsd = ((FixedScaleDrawable) dr.getForeground ());

                    fsd.setDrawable (ícone);

                    fsd.setScale (escala);

                    ícone = dr;

                    scale = getNormalizer (). getScale (ícone, outIconBounds, nulo, nulo);

 

                    ((ColorDrawable) dr.getBackground ()) .setColor (mWrapperBackgroundColor);

                }

            } outro {

 

Limite o número de espaços de trabalho

  1. Caminho: om.android.launcher3.config.BaseFlags

    público estático final int WORKSPACE_SCREEN_SIZE_MAX = 3;

  1. Caminho: com.android.launcher3.Workspace # addExtraEmptyScreenOnDrag

   public void addExtraEmptyScreenOnDrag () {

                                    ...

                  // limitar o tamanho do espaço de trabalho

        if (FeatureFlags.CUSTOM_REMOVE) {

            if (mWorkspaceScreens.size ()> = FeatureFlags.WORKSPACE_SCREEN_SIZE_MAX) {

                Retorna;

            }

        }

 

                                      ...

}

 

Remova o ícone do APP e mantenha pressionado o menu pop-up

Caminho: com.android.launcher3.Workspace # beginDragShared

 

 public DragView beginDragShared (Ver filho, fonte DragSource, ItemInfo dragObject,

            DragPreviewProvider previewProvider, DragOptions dragOptions) {

       ...

        if (child.getParent () instanceof ShortcutAndWidgetContainer) {

            mDragSourceInternal = (ShortcutAndWidgetContainer) child.getParent ();

        }

 

                 if ( ! FeatureFlags.CUSTOM_REMOVE && instância filha de BubbleTextView &&! dragOptions.isAccessibleDrag) {

            PopupContainerWithArrow popupContainer = PopupContainerWithArrow

                    .showForIcon ((BubbleTextView) filho);

                             ...

}

 

Modificação do indicador de página

 

  1. Configuração

Caminho: values ​​/ dimens.xml

    <dimen name = "dynamic_grid_page_indicator_line_height"> 5dp </dimen>指示器 高度

largura do indicador de     <dimen name = "dynamic_grid_page_indicator_line_width"> 70 dp </dimen> (novo)

    <dimen name = "dynamic_grid_page_indicator_line_space"> intervalo do indicador de 16 dp </dimen> (novo)

 

  1. Caminho: com.android.launcher3.pageindicators.WorkspacePageIndicator # onDraw

Modifique o desenho no onDraw

 

  1. Modificado para não ocultar automaticamente

Caminho: com.android.launcher3.pageindicators.WorkspacePageIndicator # setScroll

if (! FeatureFlags.CUSTOM_REMOVE) {

            animateLineToAlpha (mActiveAlpha);

}

 

Modificar espaço de trabalho pressione e segure para exibir as configurações de papel de parede

Caminho: com.android.launcher3.touch.WorkspaceTouchListener # run

 @Sobrepor

    public void run () {

        if (mLongPressState == STATE_REQUESTED) {

            if (canHandleLongPress ()) {

                mLongPressState = STATE_PENDING_PARENT_INFORM;

                mWorkspace.getParent (). requestDisallowInterceptTouchEvent (true);

 

                mWorkspace.performHapticFeedback (HapticFeedbackConstants.LONG_PRESS,

                        HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);

                mLauncher.getUserEventDispatcher (). logActionOnContainer (Action.Touch.LONGPRESS,

                        Action.Direction.NONE, ContainerType.WORKSPACE,

                        mWorkspace.getCurrentPage ());

                if (FeatureFlags.CUSTOM_REMOVE) {

                    OptionsPopupView.startWallpaperPicker (mLauncher.getRootView ());

                }outro {

                    OptionsPopupView.showDefaultOptions (mLauncher, mTouchDownPoint.x, mTouchDownPoint.y);

                }

            } outro {

                cancelLongPress ();

            }

        }

}

 

Remova a caixa de pesquisa da página inicial e o botão allapps

Caminho : com.android.launcher3.config.BaseFlags

 

    // Sinalizador de recurso para permitir mover o QSB na tela 0 da área de trabalho.

    public static final boolean QSB_ON_FIRST_SCREEN = false ;

    // Quando ativado, o ícone de todos os aplicativos não é adicionado ao hotseat.

public static final boolean NO_ALL_APPS_ICON = true ;

 

 

Modificar transparência de fundo de AllApps

  1. Caminho : com.android.launcher3.views.ScrimView # ScrimView

public ScrimView (contexto de contexto, AttributeSet attrs) {

        super (contexto, atrs);

                         ...

        // Totalmente transparente

        mMaxScrimAlpha = 0; // 0.7f;

...

}

 

  1. Caminho: values ​​/ styles.xml

Correspondendo a allAppsScrimColor sob o tema

 <item name = "allAppsScrimColor"> # 00000000 </item>

Acho que você gosta

Origin blog.csdn.net/u011694328/article/details/109257504
Recomendado
Clasificación