zoukankan      html  css  js  c++  java
  • MTK6577+Android4.0之增加重启功能

    MTK6577+Android4.0之增加重启功能

     

    长按power按键,弹出下图:


    图1

    这里要实现增加Reboot的功能,下面记下要实现所做的修改。

    1.     在长按power按键弹出的界面增加Reboot界面

     

    首先关机的那个弹出菜单是在

    frameworks/base/policy/src/com/android/internal/policy/impl/GlobalActions.java这个文件中的private AlertDialog createDialog(),如下:

       

     /**
         * Create the global actions dialog.
         * @return A new dialog.
         */
        private AlertDialog createDialog() {
            mSilentModeAction = newSilentModeAction(mAudioManager, mHandler);
     
            mAirplaneModeOn = new ToggleAction(
                   R.drawable.ic_lock_airplane_mode,
                   R.drawable.ic_lock_airplane_mode_off,
                    R.string.global_actions_toggle_airplane_mode,
                   R.string.global_actions_airplane_mode_on_status,
                   R.string.global_actions_airplane_mode_off_status) {
     
                void onToggle(boolean on) {
                    if (Boolean.parseBoolean(
                            SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))){
                        mIsWaitingForEcmExit =true;
                        // Launch ECM exit dialog
                        Intent ecmDialogIntent =
                                new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS,null);
                       ecmDialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                       mContext.startActivity(ecmDialogIntent);
                    } else {
                        changeAirplaneModeSystemSetting(on);
                    }
                }
     
                @Override
                protected voidchangeStateFromPress(boolean buttonOn) {
                    // In ECM mode airplane statecannot be changed
                    if (!(Boolean.parseBoolean(
                           SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE)))) {
                        mState = buttonOn ?State.TurningOn : State.TurningOff;
                        mAirplaneState = mState;
                    }
                }
     
                public boolean showDuringKeyguard(){
                    return true;
                }
     
                public booleanshowBeforeProvisioning() {
                    return false;
                }
               
                //M{
               public boolean isEnabled() {
                   if(KeyguardUpdateMonitor.dual_sim_setting == 0){
                        Log.e(TAG, "if userunselect the dual sim mode setting on phone starting, the airplane mode can notbe set.");
                        return false; //if user hasnot yet selected any item in the dual_sim_mode_setting dialog on phonestarting, the airplane mode should be disabled.
                    }
                    else {
                           returnsuper.isEnabled();
                    }
                }
                //}M
            };
     
            mItems = new ArrayList<Action>();
     
            // first: power off
            mItems.add(
                new SinglePressAction(
                       com.android.internal.R.drawable.ic_lock_power_off,
                       R.string.global_action_power_off) {
     
                    public void onPress() {
                        // shutdown by making sureradio and power are handled accordingly.
                       ShutdownThread.shutdown(mContext, true);
                    }
     
                    public booleanshowDuringKeyguard() {
                        return true;
                    }
     
                    public booleanshowBeforeProvisioning() {
                        return true;
                    }
                });
                 
            
            // next: airplane mode
            mItems.add(mAirplaneModeOn);
     
            // last: silent mode
            if (SHOW_SILENT_TOGGLE) {
                mItems.add(mSilentModeAction);
            }
     
            mAdapter = new MyAdapter();
     
            final AlertDialog.Builder ab = newAlertDialog.Builder(mContext);
     
            ab.setAdapter(mAdapter, this)
                    .setInverseBackgroundForced(true);
     
            final AlertDialog dialog = ab.create();
           dialog.getListView().setItemsCanFocus(true);
           dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG);
     
            dialog.setOnDismissListener(this);
     
            return dialog;
    }

    上面的代码在// first: power off和// next: airplane mode之间增加了reboot部分,代码如下:

    // second:reboot,kandi add at 2015.01.21
             mItems.add(
                new SinglePressAction(
                       com.android.internal.R.drawable.ic_lock_reboot,
                       R.string.global_action_reboot) {
     
                    public void onPress() {
                        // shutdown by making sureradio and power are handled accordingly.
                        ShutdownThread.reboot(mContext,null, true);
                    }
     
                    public booleanshowDuringKeyguard() {
                        return true;
                    }
     
                    public booleanshowBeforeProvisioning() {
                        return true;
                    }
                });

    此代码主要阐述下面几点:

    (1)  增加字符串global_action_reboot和图片资源ic_lock_reboot,这些的定义在后面描述。

    (2)  ShutdownThread.reboot(mContext,null, true)此函数是调用

    /**
         * Request a clean shutdown, waiting forsubsystems to clean up their
         * state etc.  Must be called from a Looper thread in whichits UI
         * is shown.
         *
         * @param context Context used to displaythe shutdown progress dialog.
         * @param reason code to pass to the kernel(e.g. "recovery"), or null.
         * @param confirm true if user confirmationis needed before shutting down.
         */
        public static void reboot(final Contextcontext, String reason, boolean confirm) {
            mReboot = true;
            mRebootReason = reason;
            shutdown(context, confirm);
    }

    reason 如果值为是null,正常重启;如果是recovery,系统重启进入recovery mode

    confirm true显示关机提示框,需要用户;false不显示提示框,直接关机。


    2.     增加点击Reboot后的重启

    为了在按下重启选项之后,能出现”重启“之类的提示,还需要修改frameworksasecorejavacomandroidinternalapp ShutdownThread.java中的shutdown函数和beginShutdownSequence函数:

     

    (1)  shutdown函数

    修改之前
    final intresourceId = longPressBehavior == 2
        ? com.android.internal.R.string.shutdown_confirm_question
    : com.android.internal.R.string.shutdown_confirm;
    修改之后
    final intresourceId = longPressBehavior == 2
        ? com.android.internal.R.string.shutdown_confirm_question
        : (mReboot ?com.android.internal.R.string.reboot_confirm :
        com.android.internal.R.string.shutdown_confirm);

    (2)  beginShutdownSequence函数

    修改之前:
    pd.setTitle(context.getText(com.android.internal.R.string.power_off));        
    pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));
     
    修改之后:
    if(mReboot)
                  {
                         pd.setTitle(context.getText(com.android.internal.R.string.global_action_reboot));
                               pd.setMessage(context.getText(com.android.internal.R.string.reboot_progress));
                  }
                  else
                  {
                         pd.setTitle(context.getText(com.android.internal.R.string.power_off));
                              pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));
                  }

    3.     增加字符串和图片资源

     

    (1)  增加字符串

    在frameworks/base/core/res/res/values/strings.xml中添加一下字符串:

    <stringname="reboot_progress">Reboot...u2026</string>
    <stringname="reboot_confirm" product="default">Your phone willReboot.</string>
    <stringname="reboot_confirm" product="default">Your phone willReboot.</string>
    <stringname="global_action_reboot">Reboot</string>
    <stringname="reboot">Reboot2</string>

    在frameworksasecore es esvaluespublic.xml增加以下字符串

    <publictype="drawable" name="ic_menu_sort_by_size"id="0x0108009d" />//已有
    <publictype="drawable" name="ic_lock_reboot"id="0x0108009e" />//增加


    (2)  增加重启的图片资源

    把ic_lock_reboot.png拷贝到frameworksasecore es esdrawable-hdpi目录下

     

    4.     编译及升级

    ./mk r dr,然后单独升级system.img

  • 相关阅读:
    Encrypted Handshake Message
    RSAParameters Struct
    What if JWT is stolen?
    What's the difference between JWTs and Bearer Token?
    RSA Algorithm Example
    第18届Jolt大奖结果公布
    Ruby on rails开发从头来(windows)(三十六) 调试技巧
    Ruby on rails开发从头来(四十二) ActiveRecord基础(主键和ID)
    YouTube开放基础技术架构 让用户建自家YouTube
    Ruby on rails开发从头来(四十) ActiveRecord基础(Boolean属性)
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298300.html
Copyright © 2011-2022 走看看