Android 添加禁止下拉菜单和实现控制下拉关照栏功能

打印 上一主题 下一主题

主题 1530|帖子 1530|积分 4590

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
overlay/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values-zh-rCN/strings.xml
<string name="pull_down_switch">禁用关照下拉菜单</string>
    <string name="pull_down_switch2">打开:禁止下拉菜单 \n关闭:答应下拉菜单</string>

overlay/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values/strings.xml
 <add-resource type="string" name="pull_down_switch"/>
    <add-resource type="string" name="pull_down_switch2"/>

  <string name="pull_down_switch">Disable notify pull-down menu</string>
    <string name="pull_down_switch2">ON:disable pull down \nOFF:allow pull down</string>

【现在添加在显示栏中】
vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml/display_settings.xml
   <!--add disable pull down menu in systemUI-->
       <reference
            android:key="statusbar_switch"
            android:title="@string/pull_down_switch">
            <intent android:action="com.freeme.intent.action.switch"/>
       </Preference>
/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml/freeme_qs_switch.xml
   <?xml version="1.0" encoding="UTF-8"?>
<referenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <SwitchPreference
        android:key="switch_preference"
        android:title="@string/pull_down_switch"
        android:summary="@string/pull_down_switch2"
        android:defaultValue="true"/>
</PreferenceScreen>

   /vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/QsSwitchSetting.java
开关默认1为打开,功能实现默认为1
反之:
开关默认0为关闭 ,功能实现默认为0
<这里为默认打开菜单栏开关>
  1. package com.android.settings;
  2. import android.content.Context;
  3. import android.os.Bundle;
  4. import android.provider.SearchIndexableResource;
  5. import android.provider.Settings;
  6. import android.preference.Preference;
  7. import android.preference.SwitchPreference;
  8. import android.preference.ListPreference;
  9. import com.android.settings.R;
  10. import com.android.settings.SettingsActivity;
  11. import com.android.settings.SettingsPreferenceFragment;
  12. import android.os.SystemProperties;
  13. import android.preference.PreferenceActivity;
  14. import java.util.ArrayList;
  15. import java.util.List;
  16. import android.util.Log;
  17. import android.preference.Preference.OnPreferenceChangeListener;
  18. import java.io.File;
  19. import java.io.FileWriter;
  20. import java.io.IOException;
  21. //*/
  22. import android.os.SystemProperties;
  23. //*/
  24. public class QsSwitchSetting extends PreferenceActivity implements
  25.         Preference.OnPreferenceChangeListener {
  26.         private static final String QS_KEY = "switch_preference";
  27.         private SwitchPreference mARPreference;
  28.    
  29.         private Context mContext;
  30.          @Override
  31.         public void onCreate(Bundle icicle) {
  32.             super.onCreate(icicle);
  33.             addPreferencesFromResource(R.xml.freeme_qs_switch);
  34.             mContext = this;
  35.             initializeAllPreferences();
  36.        }
  37.         private void initializeAllPreferences() {
  38.             mARPreference = (SwitchPreference) findPreference(QS_KEY);
  39.             mARPreference.setChecked(Settings.System.getInt(getContentResolver(),"qs_switch", 1) == 1);//def 1 open
  40.             mARPreference.setOnPreferenceChangeListener(this);
  41.         }
  42.     @Override
  43.     public boolean onPreferenceChange(Preference preference, Object newValue) {
  44.         boolean isChecked = (boolean) newValue;
  45.         if (isChecked) {
  46.             //SystemProperties.set("disable.qs.switch","1");//disable
  47.             Settings.System.putInt(getContentResolver(), "qs_switch", 1);
  48.         } else {
  49.             //ystemProperties.set("disable.qs.switch","0");//able
  50.             Settings.System.putInt(getContentResolver(), "qs_switch", 0);
  51.                
  52.         }
  53.         return true;
  54.    }
  55.    private void writeFile(String path, String content) {
  56.         FileWriter fileWriter = null;
  57.         try {
  58.             fileWriter = new FileWriter(path);
  59.             if (fileWriter != null) {
  60.                 fileWriter.write(content);
  61.             }
  62.         } catch (Exception e) {
  63.             e.printStackTrace();
  64.         } finally {
  65.             if (fileWriter != null)
  66.                 try {
  67.                     fileWriter.close();
  68.                 } catch (IOException e) {
  69.                     e.printStackTrace();
  70.                 }
  71.         }
  72.     }
  73. }
复制代码
四个实现类:包括锁屏状态和未锁屏

return中断或返回值

1./vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java
   / TODO: change the method signature to use (boolean inputFocusTransferStarted)
        @Override
        public void onStatusBarMotionEvent(MotionEvent event) {
            //*/,add qs switch
            if(1 == android.provider.Settings.System.getInt(mContext.getContentResolver(), "qs_switch", 1)){//1 def open
            
            } else {

                verifyCallerAndClearCallingIdentity("onStatusBarMotionEvent", () -> {
                    // TODO move this logic to message queue
                    mCentralSurfacesOptionalLazy.get().ifPresent(centralSurfaces -> {
                        if (event.getActionMasked() == ACTION_DOWN) {
                            centralSurfaces.getPanelController().startExpandLatencyTracking();
                        }
                        mHandler.post(() -> {
                            int action = event.getActionMasked();
                            if (action == ACTION_DOWN) {
                                mInputFocusTransferStarted = true;
                                mInputFocusTransferStartY = event.getY();
                                mInputFocusTransferStartMillis = event.getEventTime();
                                centralSurfaces.onInputFocusTransfer(
                                        mInputFocusTransferStarted, false /* cancel */,
                                        0 /* velocity */);
                            }
                            if (action == ACTION_UP || action == ACTION_CANCEL) {
                                mInputFocusTransferStarted = false;
                                float velocity = (event.getY() - mInputFocusTransferStartY)
                                        / (event.getEventTime() - mInputFocusTransferStartMillis);
                                centralSurfaces.onInputFocusTransfer(mInputFocusTransferStarted,
                                        action == ACTION_CANCEL,
                                        velocity);
                            }
                            event.recycle();
                        });
                    });
                });
          }//*/
        }
  2.
 /vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
 //*/add
    private Context mContext;
    //*/

 public CommandQueue(Context context, ProtoTracer protoTracer, CommandRegistry registry) {
        mProtoTracer = protoTracer;
        mRegistry = registry;
        //*/add
       mContext = context;
        //*/

        context.getSystemService(DisplayManager.class).registerDisplayListener(this, mHandler);
        // We always have default display.
        setDisabled(DEFAULT_DISPLAY, DISABLE_NONE, DISABLE2_NONE);
    }
       // TODO(b/118592525): add multi-display support if needed.
    public boolean panelsEnabled() {
        //*/add qs_switch
        if(1 == android.provider.Settings.System.getInt(mContext.getContentResolver(), "qs_switch", 1)){//def open
           return  false;
        } else {

         
        final int disabled1 = getDisabled1(DEFAULT_DISPLAY);
        final int disabled2 = getDisabled2(DEFAULT_DISPLAY);
        return (disabled1 & StatusBarManager.DISABLE_EXPAND) == 0
                && (disabled2 & StatusBarManager.DISABLE2_NOTIFICATION_SHADE) == 0
                && !ONLY_CORE_APPS;
        }
        //*/

    }

 
  3. /vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/LockscreenShadeTransitionController.kt
class DragDownHelper(
    private val falsingManager: FalsingManager,
    private val falsingCollector: FalsingCollector,
    private val dragDownCallback: LockscreenShadeTransitionController,
    context: Context
) : Gefingerpoken {
    private var dragDownAmountOnStart = 0.0f
    lateinit var expandCallback: ExpandHelper.Callback
    lateinit var host: View
    private var minDragDistance = 0
    private var initialTouchX = 0f
    private var initialTouchY = 0f
    private var touchSlop = 0f
    private var slopMultiplier = 0f
    private val temp2 = IntArray(2)
    private var draggedFarEnough = false
    private var startingChild: ExpandableView? = null
    private var lastHeight = 0f
    var isDraggingDown = false
        private set
     //add mContext
     var mContext = context

    private val isFalseTouch: Boolean
        get() {
            return if (!dragDownCallback.isFalsingCheckNeeded) {
                false
            } else {
                falsingManager.isFalseTouch(Classifier.NOTIFICATION_DRAG_DOWN) || !draggedFarEnough
            }
        }
   override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
        val x = event.x
        val y = event.y
        when (event.actionMasked) {
            MotionEvent.ACTION_DOWN -> {
                draggedFarEnough = false
                isDraggingDown = false
                startingChild = null
                initialTouchY = y
                initialTouchX = x
            }
            MotionEvent.ACTION_MOVE -> {
                val h = y - initialTouchY
                // Adjust the touch slop if another gesture may be being performed.
                val touchSlop = if (event.classification
                        == MotionEvent.CLASSIFICATION_AMBIGUOUS_GESTURE)
                    touchSlop * slopMultiplier
                else
                    touchSlop
                if (h > touchSlop && h > Math.abs(x - initialTouchX)) {
                   //*/add if else qs_switch
                     if(1 == android.provider.Settings.System.getInt(mContext.getContentResolver(), "qs_switch", 1)){
                        return true
                     } else {

                            falsingCollector.onNotificationStartDraggingDown()
                            isDraggingDown = true
                            captureStartingChild(initialTouchX, initialTouchY)
                            initialTouchY = y
                            initialTouchX = x
                            dragDownCallback.onDragDownStarted(startingChild)
                            dragDownAmountOnStart = dragDownCallback.dragDownAmount
                            return startingChild != null || dragDownCallback.isDragDownAnywhereEnabled
                     }
                    //*/

                }
            }
        }
  4./vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
     void setQsExpansion(float height) {
         //*/add if else qs_switch
         if(1 == android.provider.Settings.System.getInt(mView.getContext().getContentResolver(), "qs_switch", 1)){
            return;
         } else {

            height = Math.min(Math.max(height, mQsMinExpansionHeight), mQsMaxExpansionHeight);
            mQsFullyExpanded = height == mQsMaxExpansionHeight && mQsMaxExpansionHeight != 0;
            boolean qsAnimatingAway = !mQsAnimatorExpand && mAnimatingQS;
            if (height > mQsMinExpansionHeight && !mQsExpanded && !mStackScrollerOverscrolling
                    && !mDozing && !qsAnimatingAway) {
                setQsExpanded(true);
            } else if (height <= mQsMinExpansionHeight && mQsExpanded) {
                setQsExpanded(false);
            }
            mQsExpansionHeight = height;
            updateQsExpansion();
            requestScrollerTopPaddingUpdate(false /* animate */);
            mKeyguardStatusBarViewController.updateViewState();
            if (mBarState == StatusBarState.SHADE_LOCKED || mBarState == KEYGUARD) {
                updateKeyguardBottomAreaAlpha();
                positionClockAndNotifications();
            }
              if (mAccessibilityManager.isEnabled()) {
                mView.setAccessibilityPaneTitle(determineAccessibilityPaneTitle());
            }
              if (!mFalsingManager.isUnlockingDisabled() && mQsFullyExpanded
                    && mFalsingCollector.shouldEnforceBouncer()) {
                mCentralSurfaces.executeRunnableDismissingKeyguard(null, null /* cancelAction */,
                        false /* dismissShade */, true /* afterKeyguardGone */, false /* deferred */);
            }
            if (DEBUG_DRAWABLE) {
                mView.invalidate();
            }
         }//*/
         
    }
  假如是仅实现屏蔽下拉栏【完全不用下拉栏】,就可不用增加菜单开关,这样直接实现return这几个类也可!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表