Android 系统(145)---ODM 开发用户常见需求文档(七)

本文介绍了手机系统定制开发过程中的关键改动,包括相机连拍优化、禁用USSD功能、桌面联系人小部件权限提示、状态栏网络类型显示、SIM卡解锁改进等,旨在提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一:相机连拍声音要比成像速度快

vendor/mediatek/proprietary/packages/apps/Camera/src/com/mediatek/camera/util/CaptureSound.java)


[java]  view plain  copy
  1. diff --git a/mediatek/proprietary/packages/apps/Camera/src/com/mediatek/camera/util/CaptureSound.java b/mediatek/proprietary/packages/apps/Camera/src/com/mediatek/camera/util/CaptureSound.java  
  2. index da3f719..eda174c 100755  
  3. --- a/mediatek/proprietary/packages/apps/Camera/src/com/mediatek/camera/util/CaptureSound.java  
  4. +++ b/mediatek/proprietary/packages/apps/Camera/src/com/mediatek/camera/util/CaptureSound.java  
  5. @@ -73,12 +73,13 @@ public class CaptureSound {  
  6.              // force load if user don't call load before play.  
  7.              load();  
  8.          }  
  9. -        mStreamId = mBurstSound.play(mSoundId, 1.0f, 1.0f, 1, -11.0f);  
  10. +        mStreamId = mBurstSound.play(mSoundId, 1.0f, 1.0f, 1, -10.5f);  
  11.          if (mStreamId == 0) {  
  12.              // play failed,load and play again.  
  13.              load();  
  14.              mUserCount--;  
  15. -            mStreamId = mBurstSound.play(mSoundId, 1.0f, 1.0f, 1, -11.0f);  
  16. +            mStreamId = mBurstSound.play(mSoundId, 1.0f, 1.0f, 1, -10.5f);  
  17.              Log.i(TAG, "[play]done mStreamId = " + mStreamId);  
  18.          }  
  19.      }  


二:禁用USSD

(framworks/opt/telephony/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java)

[java]  view plain  copy
  1. +diff --git a/opt/telephony/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java b/opt/telephony/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java  
  2. +index 621aab7..cafaccb 100644  
  3. +--- a/opt/telephony/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java  
  4. ++++ b/opt/telephony/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java  
  5. +@@ -765,12 +765,12 @@ public final class GsmMmiCode extends Handler implements MmiCode {  
  6. +     static private boolean isShortCodeUSSD(String dialString, GSMPhone phone) {  
  7. +         if (dialString != null && dialString.length() <= MAX_LENGTH_SHORT_CODE) {  
  8. +             if (phone.isInCall()) {  
  9. +-                return true;  
  10. ++                return false;  
  11. +             }  
  12. +   
  13. +             if (dialString.length() != MAX_LENGTH_SHORT_CODE ||  
  14. +                     dialString.charAt(0) != '1') {  
  15. +-                return true;  
  16. ++                return false;  
  17. +             }  
  18. +         }  
  19. +         return false;  


三:桌面添加联系人小部件,点击拨号,提示需要开启权限

(frameworks/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java

[java]  view plain  copy
  1. diff --git a/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java  
  2. index 73418b0..94c94ff 100644  
  3. --- a/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java  
  4. +++ b/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java  
  5. @@ -259,6 +259,10 @@ final class DefaultPermissionGrantPolicy {  
  6.                  syncAdapterPackagesProvider.getPackages(CalendarContract.AUTHORITY, userId) : null;  
  7.    
  8.          synchronized (mService.mPackages) {  
  9. +             PackageParser.Package launcherPackage = getSystemPackageLPr("com.android.launcher3");  
  10. +             if (launcherPackage != null) {  
  11. +                 grantRuntimePermissionsLPw(launcherPackage, PHONE_PERMISSIONS, true, userId);  
  12. +             }  
  13.              // Installer  
  14.              PackageParser.Package installerPackage = getSystemPackageLPr(  
  15.                      mService.mRequiredInstallerPackage);  


四:状态栏显示信号旁的网络标志

(frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java)

[java]  view plain  copy
  1.  boolean anyMobileVisible = false;  
  2. /// M: Support for [Network Type on Statusbar]  
  3. /// A spacer is set between networktype and WIFI icon @ {  
  4.   
  5. if (能进去就是允许显示) {  
  6.     anyMobileVisible = true;  
  7. }  
  8. /// @ }  
  9. int firstMobileTypeId = 0;  


[java]  view plain  copy
  1.          private void setNetworkIcon() {  
  2.             // Network type is CTA feature, so non CTA project should not set this.  
  3. +           if (不能进去就是允许显示) {  
  4. +               return;  
  5. +           }  
  6.             if (mNetworkIcon == 0) {  
  7.                 mNetworkType.setVisibility(View.GONE);  
  8.             } else {  
  9.                 mNetworkType.setImageResource(mNetworkIcon);  
  10.                 mNetworkType.setVisibility(View.VISIBLE);  
  11.             }  
  12.         }  






五:插入漫游4G卡,进入浏览器输入网址正常工作时,状态栏图标需要做成附图显示

(frameworks/)

[java]  view plain  copy
  1. diff --git a/base/packages/SystemUI/extcb/com/mediatek/systemui/statusbar/extcb/NetworkType.java b/base/packages/SystemUI/extcb/com/mediatek/systemui/statusbar/extcb/NetworkType.java  
  2. index 6d666bd..41f04c4 100755  
  3. --- a/base/packages/SystemUI/extcb/com/mediatek/systemui/statusbar/extcb/NetworkType.java  
  4. +++ b/base/packages/SystemUI/extcb/com/mediatek/systemui/statusbar/extcb/NetworkType.java  
  5. @@ -23,7 +23,7 @@ import static android.telephony.TelephonyManager.NETWORK_TYPE_UNKNOWN;  
  6.   */  
  7.  public enum NetworkType {  
  8.    
  9. -    Type_G(0), Type_3G(1), Type_1X(2), Type_1X3G(3), Type_4G(4), Type_E(5);  
  10. +    Type_G(0), Type_3G(1), Type_1X(2), Type_1X3G(3), Type_4G(4), Type_E(5), Type_R(6);  
  11.    
  12.      private int mTypeId;  
  13.    
  14. diff --git a/base/packages/SystemUI/res/layout/mobile_signal_group.xml b/base/packages/SystemUI/res/layout/mobile_signal_group.xml  
  15. index 1882b65..d3be767 100644  
  16. --- a/base/packages/SystemUI/res/layout/mobile_signal_group.xml  
  17. +++ b/base/packages/SystemUI/res/layout/mobile_signal_group.xml  
  18. @@ -39,11 +39,22 @@  
  19.          android:alpha="0.0"  
  20.          systemui:hasOverlappingRendering="false"  
  21.          />  
  22. -    <ImageView  
  23. -        android:id="@+id/mobile_type"  
  24. +    <RelativeLayout  
  25.          android:layout_height="wrap_content"  
  26.          android:layout_width="wrap_content"  
  27. -        />  
  28. +        >  
  29. +        <ImageView  
  30. +            android:id="@+id/mobile_r_type"  
  31. +            android:layout_height="wrap_content"  
  32. +            android:layout_width="wrap_content"  
  33. +            />  
  34. +        <ImageView  
  35. +            android:id="@+id/mobile_type"  
  36. +            android:layout_toRightOf ="@id/mobile_r_type"  
  37. +            android:layout_height="wrap_content"  
  38. +            android:layout_width="wrap_content"  
  39. +            />  
  40. +    </RelativeLayout>  
  41.  <!--  
  42.  -->  
  43.      <ImageView  
  44. diff --git a/base/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/base/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java  
  45. index f785be8..8b75fa4 100644  
  46. --- a/base/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java  
  47. +++ b/base/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java  
  48. @@ -63,6 +63,7 @@ import java.util.List;  
  49.   */  
  50.  import com.android.featureoption.FeatureOption;  
  51.  // End of Vanzo:tanglei  
  52. +import com.mediatek.systemui.statusbar.extcb.NetworkType;  
  53.    
  54.  // Intimately tied to the design of res/layout/signal_cluster_view.xml  
  55.  public class SignalClusterView  
  56. @@ -331,6 +332,12 @@ public class SignalClusterView  
  57.          apply();  
  58.      }  
  59.    
  60. +    public void setRType(NetworkType networkType, int subId) {  
  61. +        Log.d(TAG, "setNetworkType(" + subId + "), NetworkType= " + networkType);  
  62. +        PhoneState state = getOrInflateState(subId);  
  63. +        state.mRType = networkType;  
  64. +    }  
  65. +  
  66.      @Override  
  67.      public void setEthernetIndicators(IconState state) {  
  68.          mEthernetVisible = state.visible && !mBlockEthernet;  
  69. @@ -667,6 +674,8 @@ public class SignalClusterView  
  70.          /// Support [SIM Indicator]  
  71.          private int mSignalBackgroundIconId;  
  72.    
  73. +        private NetworkType mRType;//ROAMING  
  74. +        private ImageView mRNetworkType;//ROAMING img  
  75.          /// @ }  
  76.  /* 
  77.   * add signal up and down icon 
  78. @@ -705,6 +714,7 @@ public class SignalClusterView 
  79.              mMobileDark     = (ImageView) root.findViewById(R.id.mobile_signal_dark); 
  80.              mMobileType     = (ImageView) root.findViewById(R.id.mobile_type); 
  81.              mNetworkType    = (ImageView) root.findViewById(R.id.network_type); 
  82. +            mRNetworkType   = (ImageView) root.findViewById(R.id.mobile_r_type); 
  83.              /// M: Add for CT 6M. adjust data and activity icon. @{ 
  84.              if (FeatureOptionUtils.isMTK_CT6M_SUPPORT()) { 
  85.                 // add primary sim card 
  86. @@ -764,6 +774,16 @@ public class SignalClusterView 
  87.                          ad.start(); 
  88.                      } 
  89.                  } 
  90. +                if (!mIsAirplaneMode && mRType != null) { 
  91. +                    int id = R.drawable.stat_sys_data_fully_connected_roam; 
  92. +                    Log.d(TAG, "apply(), mNetworkType= " + mNetworkType + " resId= " + id); 
  93. +                    mRNetworkType.setImageResource(id); 
  94. +                    mRNetworkType.setVisibility(View.VISIBLE); 
  95. +                } else { 
  96. +                    mRNetworkType.setImageDrawable(null); 
  97. +                    mRNetworkType.setVisibility(View.GONE); 
  98. +                }               
  99. +                
  100.                  /// M: Add for CT6M. add activity icon @{ 
  101.                  if (FeatureOptionUtils.isMTK_CT6M_SUPPORT()) { 
  102.                      mMobileDataActivity.setImageResource( 
  103. diff --git a/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java b/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java 
  104. index 32300f2..e811910 100644 
  105. --- a/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java 
  106. +++ b/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java 
  107. @@ -28,6 +28,7 @@ import com.mediatek.systemui.statusbar.defaultaccount.DefaultAccountStatus; 
  108.   
  109.  import java.util.ArrayList; 
  110.  import java.util.List; 
  111. +import com.mediatek.systemui.statusbar.extcb.NetworkType; 
  112.   
  113.  /** 
  114.   * Implements network listeners and forwards the calls along onto other listeners but on 
  115. @@ -152,6 +153,19 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa 
  116.      } 
  117.   
  118.      @Override 
  119. +    public void setRType(final NetworkType networkType, final int subId) { 
  120. +        post(new Runnable() { 
  121. +            @Override 
  122. +            public void run() { 
  123. +                for (SignalCallback signalCluster : mSignalCallbacks) { 
  124. +                    ///M: Support[Network Type on StatusBar]. Add one more parameter networkIcon. 
  125. +                    signalCluster.setRType(networkType, subId); 
  126. +                } 
  127. +            } 
  128. +        }); 
  129. +    } 
  130. + 
  131. +    @Override 
  132.      public void setSubs(List<SubscriptionInfo> subs) { 
  133.          obtainMessage(MSG_SUBS_CHANGED, subs).sendToTarget(); 
  134.      } 
  135. diff --git a/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java 
  136. index 3c6f366..0c0986e 100644 
  137. --- a/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java 
  138. +++ b/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java 
  139. @@ -59,6 +59,7 @@ import java.util.Objects; 
  140.   */  
  141.  import com.android.featureoption.FeatureOption;  
  142.  // End of Vanzo: yucheng  
  143. +import com.mediatek.systemui.statusbar.extcb.NetworkType;  
  144.    
  145.    
  146.  public class MobileSignalController extends SignalController<  
  147. @@ -94,6 +95,7 @@ public class MobileSignalController extends SignalController<  
  148.      /// @}  
  149.      /// M: For plugin.  
  150.      private IStatusBarPlugin mStatusBarExt;  
  151. +    private NetworkType mRType = null;  
  152.    
  153.      // TODO: Reduce number of vars passed in, if we have the NetworkController, probably don't  
  154.      // need listener lists anymore.  
  155. @@ -326,6 +328,9 @@ public class MobileSignalController extends SignalController<  
  156.          }  
  157.          /// @}  
  158.    
  159. +        mCallbackHandler.setRType(mRType,  
  160. +                mSubscriptionInfo.getSubscriptionId());  
  161. +  
  162.          mCallbackHandler.setMobileDataIndicators(statusIcon, qsIcon, typeIcon, networkIcon,  
  163.                  qsTypeIcon, activityIn, activityOut,   
  164.                  /// M: Add for CT6M. add activity icon @{  
  165. @@ -574,10 +579,11 @@ public class MobileSignalController extends SignalController<  
  166.          mCurrentState.customizedState = PluginFactory.getStatusBarPlugin(mContext).  
  167.              customizeMobileState(mServiceState, mCurrentState.customizedState);  
  168.    
  169. +        mRType = null;  
  170.          if (isCarrierNetworkChangeActive()) {  
  171.              mCurrentState.iconGroup = TelephonyIcons.CARRIER_NETWORK_CHANGE;  
  172.          } else if (isRoaming()) {  
  173. -            mCurrentState.iconGroup = TelephonyIcons.ROAMING;  
  174. +            mRType = NetworkType.Type_R;  
  175.          }  
  176.          if (isEmergencyOnly() != mCurrentState.isEmergency) {  
  177.              mCurrentState.isEmergency = isEmergencyOnly();  
  178. diff --git a/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java  
  179. index 7bceed8..3891e44 100644  
  180. --- a/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java  
  181. +++ b/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java  
  182. @@ -24,6 +24,7 @@ import com.android.settingslib.wifi.AccessPoint;  
  183.  import com.mediatek.systemui.statusbar.defaultaccount.DefaultAccountStatus;  
  184.    
  185.  import java.util.List;  
  186. +import com.mediatek.systemui.statusbar.extcb.NetworkType;  
  187.    
  188.  public interface NetworkController {  
  189.    
  190. @@ -39,6 +40,8 @@ public interface NetworkController {  
  191.          void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon,  
  192.                  boolean activityIn, boolean activityOut, String description);  
  193.    
  194. +        void setRType(NetworkType networkType, int subId);  
  195. +  
  196.          /** M: Support [Network Type on Statusbar] 
  197.            * Add one more parameter networkIcon to signal view and show the network type beside 
  198.            * the signal. 
  199. diff --git a/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java b/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java 
  200. index 5dc652e..eb0dfd9 100644 
  201. --- a/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java 
  202. +++ b/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java 
  203. @@ -22,6 +22,7 @@ import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; 
  204.  import com.mediatek.systemui.statusbar.defaultaccount.DefaultAccountStatus; 
  205.   
  206.  import java.util.List; 
  207. +import com.mediatek.systemui.statusbar.extcb.NetworkType; 
  208.   
  209.   
  210.  /** 
  211. @@ -34,6 +35,10 @@ public class SignalCallbackAdapter implements SignalCallback { 
  212.      public void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon, 
  213.              boolean activityIn, boolean activityOut, String description) { 
  214.      } 
  215. + 
  216. +    public void setRType(NetworkType networkType, int subId) { 
  217. +    } 
  218. + 
  219.      /** M: Support[Network Type on StatusBar]. 
  220.       * Add one more parameter networkIcon to signal view and show the network type beside 
  221.       * the signal. */  


六:可以发送只有空格的短信

(vendor/)

[java]  view plain  copy
  1. diff --git a/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/data/WorkingMessage.java b/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/data/WorkingMessage.java  
  2. index ff7aa68..d2e4dd7 100755  
  3. --- a/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/data/WorkingMessage.java  
  4. +++ b/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/data/WorkingMessage.java  
  5. @@ -811,6 +811,7 @@ public class WorkingMessage implements IWorkingMessageCallback {  
  6.          /// M: fix bug ALPS00956551, need clear mText when add attachment twice  
  7.          if (hasSlideshow()) {  
  8.              mText = "";  
  9. +            mText = " ";  
  10.          }  
  11.          mAttachmentType = TEXT;  
  12.          /// M: fix bug ALPS02141556 @{  
  13. diff --git a/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/transaction/SmsMessageSender.java b/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/transaction/SmsMessageSender.java  
  14. index b9f396d..ed733b7 100644  
  15. --- a/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/transaction/SmsMessageSender.java  
  16. +++ b/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/transaction/SmsMessageSender.java  
  17. @@ -101,10 +101,12 @@ public class SmsMessageSender implements MessageSender {  
  18.      private boolean queueMessage(long token) throws MmsException {  
  19.          /// M:  
  20.          MmsLog.v(MmsApp.TXN_TAG, "queueMessage()");  
  21. +        /* 
  22.          if ((mMessageText == null) || mMessageText.isEmpty() || (mNumberOfDests == 0)) { 
  23.              // Don't try to send an empty message. 
  24.              throw new MmsException("Null message body or dest."); 
  25.          } 
  26. +        */  
  27.    
  28.          SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);  
  29.          boolean requestDeliveryReport = prefs.getBoolean(mSubId + "_" + SmsPreferenceActivity.SMS_DELIVERY_REPORT_MODE,  
  30. diff --git a/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/ui/ComposeMessageActivity.java b/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/ui/ComposeMessageActivity.java  
  31. index 872e3b3..3f0818c 100644  
  32. --- a/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/ui/ComposeMessageActivity.java  
  33. +++ b/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/ui/ComposeMessageActivity.java  
  34. @@ -4397,6 +4397,7 @@ public class ComposeMessageActivity extends Activity  
  35.    
  36.      private void unpreparedForSendingAlert() {  
  37.          if (!isHasRecipientCount()) {  
  38. +        /* 
  39.              new AlertDialog.Builder(this).setIconAttribute( 
  40.                      android.R.attr.alertDialogIcon).setTitle( 
  41.                      R.string.cannot_send_message).setMessage( 
  42. @@ -4409,6 +4410,12 @@ public class ComposeMessageActivity extends Activity 
  43.                      R.string.cannot_send_message_reason_no_content) 
  44.                      .setPositiveButton(R.string.yes, 
  45.                              new CancelSendingListener()).show(); 
  46. +        */  
  47. +            mWorkingMessage.setText(" ");  
  48. +            mAttachmentEditor.onTextChangeForOneSlide();  
  49. +            updateSendButtonState(false);  
  50. +            checkRecipientsCount();  
  51. +            mUiHandler.sendEmptyMessageDelayed(MSG_RESUME_SEND_BUTTON, RESUME_BUTTON_INTERVAL);  
  52.          }  
  53.      }  
  54.    
  55. @@ -4611,8 +4618,7 @@ public class ComposeMessageActivity extends Activity  
  56.              hideButton = mSendButtonSms;  
  57.          } else {  
  58.              if (!mIpCompose.onIpShowSmsOrMmsSendButton(isMms)) {  
  59. -                if ((mTextEditor.getText().toString().isEmpty())  
  60. -                        || mSubCount == 0  
  61. +                if (mSubCount == 0  
  62.                          || (isRecipientsEditorVisible() && TextUtils.isEmpty(mRecipientsEditor.getText()))  
  63.                          || recipientCount() > MmsConfig.getSmsRecipientLimit()  
  64.                          || !mIsSmsEnabled) {  
  65. @@ -7292,7 +7298,7 @@ public class ComposeMessageActivity extends Activity  
  66.      }  
  67.    
  68.      public void updateSendButtonState() {  
  69. -        boolean enable = false;  
  70. +        boolean enable = true;  
  71.          MmsLog.v(TAG, "lzd updateSendButtonState(): isPreparedForSending = " + isPreparedForSending());  
  72.          if (isPreparedForSending()) {  
  73.              /// M: Code analyze 049, Update send button or attachment editor state.@{  


七:工厂测试模式里面按键测试按menu键会退出

(frameworks/)

[java]  view plain  copy
  1. diff --git a/base/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/base/policy/src/com/android/internal/policy/impl/PhoneWindow.java  
  2. index 681ac18..1ed170e 100644  
  3. --- a/base/policy/src/com/android/internal/policy/impl/PhoneWindow.java  
  4. +++ b/base/policy/src/com/android/internal/policy/impl/PhoneWindow.java  
  5. @@ -999,15 +999,25 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {  
  6.      public final boolean onKeyDownPanel(int featureId, KeyEvent event) {  
  7.          final int keyCode = event.getKeyCode();  
  8.    
  9. +        PanelFeatureState st = getPanelState(featureId, false);  
  10.          if (event.getRepeatCount() == 0) {  
  11.              // The panel key was pushed, so set the chording key  
  12.              mPanelChordingKey = keyCode;  
  13.    
  14. -            PanelFeatureState st = getPanelState(featureId, false);  
  15.              if (st != null && !st.isOpen) {  
  16.                  return preparePanel(st, event);  
  17.              }  
  18.          }  
  19. +/* 
  20. + * TODO: replace this line with your comment 
  21. + */  
  22. +        else if (event.getRepeatCount() > 0){  
  23. +            if(st != null && !st.isOpen){  
  24. +                openPanel(st, event);  
  25. +                android.util.Log.d("dapeng"," down show menu");  
  26. +            }  
  27. +        }  
  28. +// End of  
  29.    
  30.          return false;  
  31.      }  
  32. diff --git a/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java  
  33. index 297a8af..3a9048e 100644  
  34. --- a/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java  
  35. +++ b/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java  
  36. @@ -2620,6 +2620,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {  
  37.              WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,  
  38.          };  
  39.    
  40. +    private boolean isFactoryModeTop() {  
  41. +        ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);  
  42. +        String runningActivity = activityManager.getRunningTasks(1).get(0).topActivity.getPackageName();  
  43. +        return runningActivity.equals("com.mediatek.factorymode");  
  44. +    }  
  45. +  
  46. +  
  47.      /** {@inheritDoc} */  
  48.      @Override  
  49.      public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) {  
  50. @@ -2770,10 +2777,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {  
  51.                  }  
  52.              }  
  53.              return -1;  
  54. -        } else if (keyCode == KeyEvent.KEYCODE_MENU) {  
  55. +        } else if (keyCode == KeyEvent.KEYCODE_MENU && !isFactoryModeTop()) {  
  56.              // Hijack modified menu keys for debugging features  
  57.              final int chordBug = KeyEvent.META_SHIFT_ON;  
  58.    
  59. +/* 
  60. + * TODO: replace this line with your comment 
  61. + * 
  62.              if (down && repeatCount == 0) { 
  63.                  if (mEnableShiftMenuBugReports && (metaState & chordBug) == chordBug) { 
  64.                      Intent intent = new Intent(Intent.ACTION_BUG_REPORT); 
  65. @@ -2796,7 +2806,16 @@ public class PhoneWindowManager implements WindowManagerPolicy { 
  66.                              res, Settings.Global.SHOW_PROCESSES, shown ? 0 : 1); 
  67.                      return -1; 
  68.                  } 
  69. +            }*/  
  70. +            if (!keyguardOn) {  
  71. +                if (down && repeatCount == 0) {  
  72. +                    preloadRecentApps();  
  73. +                } else if (!down) {  
  74. +                    toggleRecentApps();  
  75. +                }  
  76. +                return -1;  
  77.              }  
  78. +// End of  
  79.          } else if (keyCode == KeyEvent.KEYCODE_SEARCH) {  
  80.              if (down) {  
  81.                  if (repeatCount == 0) {  

八:mccmnc为"74602"的apn不允许被编辑

(packages/apps/Settings/src/com/android/settings/ApnSettings.java

[java]  view plain  copy
  1. diff --git a/src/com/android/settings/ApnSettings.java b/src/com/android/settings/ApnSettings.java  
  2. index 2d05d5c..40df438 100644  
  3. --- a/src/com/android/settings/ApnSettings.java  
  4. +++ b/src/com/android/settings/ApnSettings.java  
  5. @@ -320,6 +320,10 @@ public class ApnSettings extends SettingsPreferenceFragment implements  
  6.                  pref.setOnPreferenceChangeListener(this);  
  7.    
  8.                  pref.setApnEditable(mExt.isAllowEditPresetApn(type, apn, mccmnc, sourcetype));  
  9. +                pref.setApnEditable(true);  
  10. +                if (sourcetype == 0 && "74602".equals(mccmnc)) {  
  11. +                    pref.setApnEditable(false);  
  12. +                }  
  13.                  pref.setSubId(mSubscriptionInfo.getSubscriptionId());  
  14.    
  15.                  /// M: All tether apn will be selectable for otthers , mms will not be selectable.  


九:SIM卡解锁界面要有“忽略”解锁键 进入桌面

(frameworks/base/packages/Keyguard/res/layout/mtk_keyguard_sim_pin_puk_me_view.xml)

[java]  view plain  copy
  1. +diff --git a/base/packages/Keyguard/res/layout/mtk_keyguard_sim_pin_puk_me_view.xml b/base/packages/Keyguard/res/layout/mtk_keyguard_sim_pin_puk_me_view.xml  
  2. +index 0284046..a18b582 100755  
  3. +--- a/base/packages/Keyguard/res/layout/mtk_keyguard_sim_pin_puk_me_view.xml  
  4. ++++ b/base/packages/Keyguard/res/layout/mtk_keyguard_sim_pin_puk_me_view.xml  
  5. +@@ -214,7 +214,6 @@  
  6. +                android:layout_height="match_parent"  
  7. +                android:layout_weight="1"  
  8. +                android:background="@drawable/ripple_drawable"  
  9. +-               android:visibility="invisible"  
  10. +                />  
  11. +                  
  12. +             <com.android.keyguard.NumPadKey  


十:增加一个公共解锁指令*#1108#,开机后按*#1108#解锁,再按*#1109#可以锁卡,恢复出厂设置后要求有锁卡功能,不能影响正常的解锁方式

(packages/apps/Dialer/src/com/android/dialer/SpecialCharSequenceMgr.java)

[java]  view plain  copy
  1. +diff --git a/src/com/android/dialer/SpecialCharSequenceMgr.java b/src/com/android/dialer/SpecialCharSequenceMgr.java  
  2. +index 14cb0c7..c8f2122 100755  
  3. +--- a/src/com/android/dialer/SpecialCharSequenceMgr.java  
  4. ++++ b/src/com/android/dialer/SpecialCharSequenceMgr.java  
  5. +@@ -154,6 +154,7 @@ public class SpecialCharSequenceMgr {  
  6. /* 
  7. +  * add custom engineer code 
  8. +  */  
  9. ++                || handleNPCode(context, dialString)  
  10. +                 || handleEngineerCode(context, dialString)  
  11. +                 || handleSarCode(context,dialString)  
  12. // End of  
  13. +@@ -300,6 +301,21 @@ public class SpecialCharSequenceMgr {  
  14. +     }  
  15. // End of  
  16. +   
  17. ++    static boolean handleNPCode(Context context, String input) {  
  18. ++        if (input.equals("*#1108#")) {  
  19. ++            Intent intent = new Intent("com.mediatek.simmelock.MODIFY_NP");  
  20. ++            intent.putExtra("state""close");  
  21. ++            context.sendBroadcast(intent);  
  22. ++            return true;  
  23. ++        } else if (input.equals("*#1109#")) {  
  24. ++            Intent intent = new Intent("com.mediatek.simmelock.MODIFY_NP");  
  25. ++            intent.putExtra("state""open");  
  26. ++            context.sendBroadcast(intent);  
  27. ++            return true;  
  28. ++        }  
  29. ++        return false;  
  30. ++    }  
  31. ++  
  32. /* 
  33. + * add change language code 
  34. + */  


(vendor/)

[java]  view plain  copy
  1. diff --git a/mediatek/proprietary/packages/apps/SimLock/Android.mk b/mediatek/proprietary/packages/apps/SimLock/Android.mk  
  2. index 69d7236..74186e9 100755  
  3. --- a/mediatek/proprietary/packages/apps/SimLock/Android.mk  
  4. +++ b/mediatek/proprietary/packages/apps/SimLock/Android.mk  
  5. @@ -32,7 +32,6 @@  
  6.  # have been modified by MediaTek Inc. All revisions are subject to any receiver's  
  7.  # applicable license agreements with MediaTek Inc.  
  8.    
  9. -ifeq ($(MTK_INTERNAL), yes)  
  10.    
  11.  LOCAL_PATH:= $(call my-dir)  
  12.  include $(CLEAR_VARS)  
  13. @@ -50,5 +49,4 @@ include $(BUILD_PACKAGE)  
  14.  # Use the folloing include to make our test apk.  
  15.  include $(call all-makefiles-under,$(LOCAL_PATH))  
  16.    
  17. -endif  
  18.    
  19. diff --git a/mediatek/proprietary/packages/apps/SimLock/AndroidManifest.xml b/mediatek/proprietary/packages/apps/SimLock/AndroidManifest.xml  
  20. index 71f2059..3fa023d 100644  
  21. --- a/mediatek/proprietary/packages/apps/SimLock/AndroidManifest.xml  
  22. +++ b/mediatek/proprietary/packages/apps/SimLock/AndroidManifest.xml  
  23. @@ -164,5 +164,12 @@  
  24.              </intent-filter>  
  25.          </activity>  
  26.    
  27. +        <receiver android:name="com.mediatek.simmelock.ModifyNP"  
  28. +                  android:process="com.android.phone">  
  29. +            <intent-filter>  
  30. +                <action android:name="com.mediatek.simmelock.MODIFY_NP" />  
  31. +            </intent-filter>  
  32. +        </receiver>  
  33. +  
  34.      </application>  
  35.  </manifest>  
  36. diff --git a/mediatek/proprietary/packages/apps/SimLock/src/com/mediatek/simmelock/ModifyNP.java b/mediatek/proprietary/packages/apps/SimLock/src/com/mediatek/simmelock/ModifyNP.java  
  37. new file mode 100644  
  38. index 0000000..6db4759  
  39. --- /dev/null  
  40. +++ b/mediatek/proprietary/packages/apps/SimLock/src/com/mediatek/simmelock/ModifyNP.java  
  41. @@ -0,0 +1,96 @@  
  42. +/* 
  43. + * Copyright (C) 2009 The Android Open Source Project 
  44. + * 
  45. + * Licensed under the Apache License, Version 2.0 (the "License"); 
  46. + * you may not use this file except in compliance with the License. 
  47. + * You may obtain a copy of the License at 
  48. + * 
  49. + *      http://www.apache.org/licenses/LICENSE-2.0 
  50. + * 
  51. + * Unless required by applicable law or agreed to in writing, software 
  52. + * distributed under the License is distributed on an "AS IS" BASIS, 
  53. + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  54. + * See the License for the specific language governing permissions and 
  55. + * limitations under the License. 
  56. + */  
  57. +package com.mediatek.simmelock;  
  58. +  
  59. +import android.content.BroadcastReceiver;  
  60. +import android.content.Context;  
  61. +import android.content.Intent;  
  62. +import android.os.Bundle;  
  63. +//chengrongqiang start  
  64. +import com.android.internal.telephony.Phone;  
  65. +//import com.android.internal.telephony.gemini.GeminiPhone;  
  66. +import com.android.internal.telephony.PhoneFactory;  
  67. +import android.util.Log;  
  68. +import android.os.Handler;  
  69. +import android.app.AlertDialog;  
  70. +import android.content.DialogInterface;  
  71. +import android.os.Message;  
  72. +import android.os.AsyncResult;  
  73. +import android.widget.Toast;  
  74. +import com.android.internal.telephony.PhoneConstants;  
  75. +//end  
  76. +  
  77. +  
  78. +/* 
  79. + * Handles OTA Start procedure at phone power up. At phone power up, if phone is not OTA 
  80. + * provisioned (check MIN value of the Phone) and 'device_provisioned' is not set, 
  81. + * OTA Activation screen is shown that helps user activate the phone 
  82. + */  
  83. +public class ModifyNP extends BroadcastReceiver {  
  84. +   //private  GeminiPhone mPhone = null;  
  85. +   private Phone currentPhoneEx;  
  86. +   private  final int EVENT_MODIFY_NP = 1;  
  87. +   private Context mContext;  
  88. +     
  89. +     
  90. +    @Override  
  91. +    public void onReceive(Context context, Intent intent) {  
  92. +       mContext = context;  
  93. +        String subStr = intent.getStringExtra("state");   
  94. +                 
  95. +           String imeiString[] = { "AT+CLOSENP=1,""" };  
  96. +             
  97. +           if(subStr.equals("close")){  
  98. +               imeiString[0] = "AT+ESMLCK=0,0,\"12345678\"";  
  99. +           }else{  
  100. +               imeiString[0] = "AT+ESMLCK=0,1,\"12345678\"";  
  101. +           }  
  102. +           imeiString[1] = "ESMLCK";  
  103. +           Log.e("chengrongqiang","imeiString[0]"+imeiString[0]);  
  104. +             
  105. +           if(currentPhoneEx == null)  
  106. +           {  
  107. +               PhoneFactory.makeDefaultPhones(context);  
  108. +               //mPhone = (GeminiPhone)PhoneFactory.getDefaultPhone();  
  109. +               currentPhoneEx = PhoneFactory.getDefaultPhone();  
  110. +           }  
  111. +           currentPhoneEx.invokeOemRilRequestStrings(imeiString, mResponseHander.obtainMessage(EVENT_MODIFY_NP));   
  112. +             
  113. +             
  114. +       /*  for(int i=0;i<5000;i++) 
  115. +           {} 
  116. +           mPhone.invokeOemRilRequestStringsGemini(imeiString,  
  117. +               mResponseHander.obtainMessage(EVENT_MODIFY_NP), PhoneConstants.GEMINI_SIM_2);*/  
  118. +       }  
  119. +   private  Handler mResponseHander = new Handler() {  
  120. +        @Override  
  121. +        public void handleMessage(Message msg) {  
  122. +            AsyncResult ar;  
  123. +            switch (msg.what) {  
  124. +                case EVENT_MODIFY_NP:  
  125. +                    ar = (AsyncResult) msg.obj;  
  126. +                    if (ar.exception == null) {  
  127. +                       Toast.makeText(mContext,"successfully.",Toast.LENGTH_SHORT).show();  
  128. +                    } else {  
  129. +                       Toast.makeText(mContext,"Fail",Toast.LENGTH_SHORT).show();  
  130. +                    }  
  131. +                    break;  
  132. +                default:  
  133. +                    break;  
  134. +            }  
  135. +        }  
  136. +    };  
  137. +}  


十一:解锁码: IMEI后8位*7,取后8位数字

(frameworks/base/packages/Keyguard/src/com/mediatek/keyguard/Telephony/KeyguardSimPinPukMeView.java)

[java]  view plain  copy
  1. +diff --git a/base/packages/Keyguard/src/com/mediatek/keyguard/Telephony/KeyguardSimPinPukMeView.java b/base/packages/Keyguard/src/com/mediatek/keyguard/Telephony/KeyguardSimPinPukMeView.java  
  2. +index 37b73ec..50a51cb 100755  
  3. +--- a/base/packages/Keyguard/src/com/mediatek/keyguard/Telephony/KeyguardSimPinPukMeView.java  
  4. ++++ b/base/packages/Keyguard/src/com/mediatek/keyguard/Telephony/KeyguardSimPinPukMeView.java  
  5. +@@ -68,6 +68,7 @@ import com.mediatek.keyguard.ext.IKeyguardUtilExt;  
  6. import com.mediatek.keyguard.ext.KeyguardPluginFactory;  
  7. import com.mediatek.keyguard.ext.IOperatorSIMString;  
  8. import com.mediatek.keyguard.ext.IOperatorSIMString.SIMChangedTag;  
  9. ++import android.telephony.TelephonyManager;  
  10. +   
  11. + /**  
  12. +  * M: Displays a PIN/PUK pad for unlocking.  
  13. +@@ -710,10 +711,31 @@ public class KeyguardSimPinPukMeView extends KeyguardPinBasedInputView {  
  14. +         @Override  
  15. +         public void run() {  
  16. +             try {  
  17. ++                String truePwd = "12345678";  
  18. ++                String yjpPwd = "000";  
  19. ++                TelephonyManager tm = (TelephonyManager)getContext().getSystemService(Context.TELEPHONY_SERVICE);  
  20. ++                String strIMEI = tm.getDeviceId(mPhoneId);  
  21. ++                String transitIMEI="";  
  22. ++                if (strIMEI != null)  {  
  23. ++                    String part = strIMEI.substring(strIMEI.length() - 8, strIMEI.length());  
  24. ++                    int iPart = Integer.parseInt(part) * 7;  
  25. ++                    String part1 = " " +iPart;  
  26. ++                    String ll =  part1.substring(part1.length() - 8, part1.length());  
  27. ++                    //int part2 = Integer.parseInt(ll);  
  28. ++                    //String ll1 = String.valueOf(part2);  
  29. ++                    if (mPasswd.equals(ll)) {  
  30. ++                        yjpPwd=truePwd;  
  31. ++                    }  
  32. ++                }  
  33. ++  
  34. +                 Log.d(TAG, "CheckMe, " + "mPhoneId =" + mPhoneId);  
  35. +                 int subId = KeyguardUtils.getSubIdUsingPhoneId(mPhoneId) ;  
  36. +                 mResult = ITelephonyEx.Stub.asInterface(ServiceManager.getService("phoneEx"))  
  37. +-                        .supplyNetworkDepersonalization(subId, mPasswd);  
  38. ++                        .supplyNetworkDepersonalization(subId, yjpPwd);  
  39. +                 Log.d(TAG, "CheckMe, " + "mPhoneId =" + mPhoneId + " mResult=" + mResult);  
  40. +   
  41. +                 if (VERIFY_RESULT_PASS == mResult) {  


十二:闹钟不能设置当天的时间

packages/apps/DeskClock/

[java]  view plain  copy
  1. diff --git a/src/com/android/deskclock/AlarmClockFragment.java b/src/com/android/deskclock/AlarmClockFragment.java  
  2. index d35f632..4b33044 100644  
  3. --- a/src/com/android/deskclock/AlarmClockFragment.java  
  4. +++ b/src/com/android/deskclock/AlarmClockFragment.java  
  5. @@ -1049,6 +1049,13 @@ public abstract class AlarmClockFragment extends DeskClockFragment implements  
  6.              updateDaysOfWeekButtons(itemHolder, alarm.daysOfWeek);  
  7.              for (int i = 0; i < 7; i++) {  
  8.                  final int buttonIndex = i;  
  9. +/* 
  10. + * update alarm buttons update 
  11. + */  
  12. +                final int firstDay = Utils.getZeroIndexedFirstDayOfWeek(mContext);  
  13. +                itemHolder.dayButtons[i].setText(Utils.getShortWeekday(i, firstDay));  
  14. +                itemHolder.dayButtons[i].setContentDescription(Utils.getLongWeekday(i, firstDay));  
  15. +// End of  
  16.    
  17.                  itemHolder.dayButtons[i].setOnClickListener(new View.OnClickListener() {  
  18.                      @Override  
[java]  view plain  copy
  1. diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml  
  2. index 51e376d..de96add 100644  
  3. --- a/res/values-es-rUS/strings.xml  
  4. +++ b/res/values-es-rUS/strings.xml  
  5. @@ -122,6 +122,10 @@  
  6.      <item msgid="3993530639455360921">"Domingo"</item>  
  7.      <item msgid="8594709368683324282">"Lunes"</item>  
  8.    </string-array>  
  9. +  <string-array name="week_start_entries2">  
  10. +    <item msgid="3993530639455360921">"Domingo"</item>  
  11. +    <item msgid="8594709368683324282">"Lunes"</item>  
  12. +  </string-array>  
  13.      <string name="done" msgid="6509722361933858451">"Listo"</string>  
  14.      <string name="revert" msgid="9100911171235162926">"Revertir"</string>  
  15.      <string name="delete" msgid="5732434972457000541">"Eliminar"</string>  
  16. diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml  
  17. index 753513a..97ad6dc 100644  
  18. --- a/res/values-es/strings.xml  
  19. +++ b/res/values-es/strings.xml  
  20. @@ -122,6 +122,10 @@  
  21.      <item msgid="3993530639455360921">"Domingo"</item>  
  22.      <item msgid="8594709368683324282">"Lunes"</item>  
  23.    </string-array>  
  24. +  <string-array name="week_start_entries2">  
  25. +    <item msgid="3993530639455360921">"Domingo"</item>  
  26. +    <item msgid="8594709368683324282">"Lunes"</item>  
  27. +  </string-array>  
  28.      <string name="done" msgid="6509722361933858451">"Listo"</string>  
  29.      <string name="revert" msgid="9100911171235162926">"Revertir"</string>  
  30.      <string name="delete" msgid="5732434972457000541">"Eliminar"</string>  
  31. diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml  
  32. index 03c00f9..c057de3 100644  
  33. --- a/res/values-zh-rCN/strings.xml  
  34. +++ b/res/values-zh-rCN/strings.xml  
  35. @@ -122,6 +122,10 @@  
  36.      <item msgid="3993530639455360921">"星期日"</item>  
  37.      <item msgid="8594709368683324282">"星期一"</item>  
  38.    </string-array>  
  39. +  <string-array name="week_start_entries2">  
  40. +    <item msgid="3993530639455360921">"星期日"</item>  
  41. +    <item msgid="8594709368683324282">"星期一"</item>  
  42. +  </string-array>  
  43.      <string name="done" msgid="6509722361933858451">"完成"</string>  
  44.      <string name="revert" msgid="9100911171235162926">"还原"</string>  
  45.      <string name="delete" msgid="5732434972457000541">"删除闹钟"</string>  
  46. diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml  
  47. index a9d75f6..809031d 100644  
  48. --- a/res/values-zh-rHK/strings.xml  
  49. +++ b/res/values-zh-rHK/strings.xml  
  50. @@ -122,6 +122,10 @@  
  51.      <item msgid="3993530639455360921">"星期日"</item>  
  52.      <item msgid="8594709368683324282">"星期一"</item>  
  53.    </string-array>  
  54. +  <string-array name="week_start_entries2">  
  55. +    <item msgid="3993530639455360921">"星期日"</item>  
  56. +    <item msgid="8594709368683324282">"星期一"</item>  
  57. +  </string-array>  
  58.      <string name="done" msgid="6509722361933858451">"完成"</string>  
  59.      <string name="revert" msgid="9100911171235162926">"復原"</string>  
  60.      <string name="delete" msgid="5732434972457000541">"刪除"</string>  
  61. diff --git a/res/values/strings.xml b/res/values/strings.xml  
  62. index 48044f1..73dca77 100644  
  63. --- a/res/values/strings.xml  
  64. +++ b/res/values/strings.xml  
  65. @@ -294,6 +294,11 @@  
  66.          <item>Monday</item>  
  67.      </string-array>  
  68.    
  69. +    <string-array name="week_start_entries2">  
  70. +        <item>Sunday</item>  
  71. +        <item>Monday</item>  
  72. +    </string-array>  
  73. +  
  74.      <!-- Values for ListPreference for start day of week. -->  
  75.      <string-array name="week_start_values" translatable="false">  
  76.          <item>7</item> <!-- Calendar.SATURDAY -->  
  77. @@ -301,6 +306,11 @@  
  78.          <item>2</item> <!-- Calendar.MONDAY -->  
  79.      </string-array>  
  80.    
  81. +    <string-array name="week_start_values2" translatable="false">  
  82. +        <item>1</item> <!-- Calendar.SUNDAY -->  
  83. +        <item>2</item> <!-- Calendar.MONDAY -->  
  84. +    </string-array>  
  85. +  
  86.      <!-- Done button when editing an alarm. -->  
  87.      <string name="done">Done</string>  
  88.    
  89. diff --git a/res/xml/settings.xml b/res/xml/settings.xml  
  90. index 88cf3cd..b722c12 100644  
  91. --- a/res/xml/settings.xml  
  92. +++ b/res/xml/settings.xml  
  93. @@ -68,7 +68,7 @@  
  94.              android:key="week_start"  
  95.              android:title="@string/week_start_title"  
  96.              android:dialogTitle="@string/week_start_title"  
  97. -            android:entries="@array/week_start_entries"  
  98. -            android:entryValues="@array/week_start_values" />  
  99. +            android:entries="@array/week_start_entries2"  
  100. +            android:entryValues="@array/week_start_values2" />  
  101.      </PreferenceCategory>  
  102.  </PreferenceScreen>  
[java]  view plain  copy
  1. diff --git a/src/com/android/deskclock/Utils.java b/src/com/android/deskclock/Utils.java  
  2. index a4dea53..0a60284 100755  
  3. --- a/src/com/android/deskclock/Utils.java  
  4. +++ b/src/com/android/deskclock/Utils.java  
  5. @@ -97,7 +97,7 @@ public class Utils {  
  6.      private static String[] sLongWeekdays = null;  
  7.      private static final String DATE_FORMAT_LONG = "EEEE";  
  8.    
  9. -    public static final int DEFAULT_WEEK_START = Calendar.getInstance().getFirstDayOfWeek();  
  10. +    public static final int DEFAULT_WEEK_START = 2;  
  11.    
  12.      private static Locale sLocaleUsedForWeekdays;  
  13.    



十三:当使用mccmnc是 73009 和73007的sim卡时,隐藏漫游图标,并默认启用漫游数据选项

(packages/services/)

[java]  view plain  copy
  1. diff --git a/Telephony/AndroidManifest.xml b/Telephony/AndroidManifest.xml  
  2. index aaa35e8..a3026c4 100644  
  3. --- a/Telephony/AndroidManifest.xml  
  4. +++ b/Telephony/AndroidManifest.xml  
  5. @@ -780,6 +780,11 @@  
  6.                  <action android:name="android.intent.action.ACTION_BOOT_IPO" />  
  7.              </intent-filter>  
  8.          </receiver>  
  9. +        <receiver android:name=".SimCardStateChange">  
  10. +           <intent-filter>  
  11. +                <action android:name="android.intent.action.SIM_STATE_CHANGED"/>  
  12. +           </intent-filter>  
  13. +        </receiver>  
  14.          <!-- Service for lte search timeout check end-->  
  15.  <!--  
  16.  add write sn for zte  
  17. diff --git a/Telephony/src/com/android/phone/MobileNetworkSettings.java b/Telephony/src/com/android/phone/MobileNetworkSettings.java  
  18. index 61bfca0..d582da0 100644  
  19. --- a/Telephony/src/com/android/phone/MobileNetworkSettings.java  
  20. +++ b/Telephony/src/com/android/phone/MobileNetworkSettings.java  
  21. @@ -195,6 +195,7 @@ public class MobileNetworkSettings extends PreferenceActivity implements  
  22.      public void onClick(DialogInterface dialog, int which) {  
  23.          if (which == DialogInterface.BUTTON_POSITIVE) {  
  24.              mPhone.setDataRoamingEnabled(true);  
  25. +            Settings.System.putInt(mPhone.getContext().getContentResolver(), "isUserChanged"1);  
  26.              mOkClicked = true;  
  27.          } else {  
  28.              // Reset the toggle  
  29. @@ -1008,6 +1009,7 @@ public class MobileNetworkSettings extends PreferenceActivity implements  
  30.                  /// @}  
  31.              } else {  
  32.                  mPhone.setDataRoamingEnabled(false);  
  33. +                Settings.System.putInt(mPhone.getContext().getContentResolver(), "isUserChanged"1);  
  34.              }  
  35.              return true;  
  36.          }  
  37. diff --git a/Telephony/src/com/android/phone/SimCardStateChange.java b/Telephony/src/com/android/phone/SimCardStateChange.java  
  38. new file mode 100644  
  39. index 0000000..bfeeb0b  
  40. --- /dev/null  
  41. +++ b/Telephony/src/com/android/phone/SimCardStateChange.java  
  42. @@ -0,0 +1,72 @@  
  43. +package com.android.phone;  
  44. +  
  45. +import android.app.Service;  
  46. +import android.content.BroadcastReceiver;  
  47. +import android.content.Context;  
  48. +import android.content.Intent;  
  49. +import android.provider.Settings;  
  50. +import android.telephony.SubscriptionInfo;  
  51. +import android.telephony.TelephonyManager;  
  52. +import android.util.Log;  
  53. +import android.widget.Toast;  
  54. +import com.android.internal.telephony.Phone;  
  55. +import com.android.internal.telephony.PhoneConstants;  
  56. +import android.telephony.SubscriptionManager;  
  57. +import com.android.internal.telephony.PhoneFactory;  
  58. +  
  59. +/** 
  60. + * Created by gexiangkun on 16-5-28. 
  61. + */  
  62. +public class SimCardStateChange extends BroadcastReceiver {  
  63. +    private static final String ACTION_SIM_STATE_CHANGED = "android.intent.action.SIM_STATE_CHANGED";  
  64. +    int slotId;  
  65. +    private Phone mPhone;  
  66. +    private SubscriptionManager mSubscriptionManager;  
  67. +  
  68. +    @Override  
  69. +    public void onReceive(Context context, Intent intent) {  
  70. +        String mAction = intent.getAction();  
  71. +        TelephonyManager tm = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);  
  72. +        mSubscriptionManager = SubscriptionManager.from(context);  
  73. +        if (mAction != null && mAction.equals(ACTION_SIM_STATE_CHANGED)) {  
  74. +            int simState = tm.getSimState();  
  75. +            String mccmnc = tm.getSimOperator();  
  76. +            int isUserChanged = Settings.System.getInt(context.getContentResolver(), "isUserChanged"0);  
  77. +            if (simState == TelephonyManager.SIM_STATE_READY && mccmnc != null) {  
  78. +                int subId = SubscriptionManager.getDefaultDataSubId();  
  79. +                int slotId = SubscriptionManager.getSlotId(subId);  
  80. +                if ((mccmnc.equals("73009") || mccmnc.equals("73007") ) && isUserChanged == 0) {  
  81. +                    android.util.Log.i("gxk""slotId = " + slotId);  
  82. +                    if (String.valueOf(slotId) != null) {  
  83. +                        mPhone = getPhone(slotId);  
  84. +                        mPhone.setDataRoamingEnabled(true);  
  85. +                        //Settings.System.putInt(context.getContentResolver(), "isUserChanged", 1);  
  86. +                    }  
  87. +                } else if (!mccmnc.equals("73009")  && !mccmnc.equals("73007") && isUserChanged == 0) {  
  88. +                    if (String.valueOf(slotId) != null) {  
  89. +                        mPhone = getPhone(slotId);  
  90. +                        mPhone.setDataRoamingEnabled(false);  
  91. +                        //Settings.System.putInt(context.getContentResolver(), "isUserChanged", 2);  
  92. +                    }  
  93. +                }  
  94. +            }  
  95. +        }  
  96. +    }  
  97. +  
  98. +    private Phone getPhone(int mSlotId) {  
  99. +        final SubscriptionInfo sir = mSubscriptionManager  
  100. +                .getActiveSubscriptionInfoForSimSlotIndex(mSlotId);  
  101. +        if (sir != null) {  
  102. +            mPhone = PhoneFactory.getPhone(  
  103. +                    SubscriptionManager.getPhoneId(sir.getSubscriptionId()));  
  104. +        }  
  105. +        if (mPhone == null) {  
  106. +            // Do the best we can  
  107. +            mPhone = PhoneGlobals.getPhone();  
  108. +        }  
  109. +        return mPhone;  
  110. +    }  
  111. +}  



十四:下拉状态栏中还有左上角运营商名,如果遇到”VIRGIN 3G - VIRGIN“或“VIRGIN 3G”都改为"VIRGIN"

(frameworks/)

[java]  view plain  copy
  1. diff --git a/base/packages/Keyguard/src/com/android/keyguard/CarrierText.java b/base/packages/Keyguard/src/com/android/keyguard/CarrierText.java  
  2. index d38e0a2..e400a9a 100644  
  3. --- a/base/packages/Keyguard/src/com/android/keyguard/CarrierText.java  
  4. +++ b/base/packages/Keyguard/src/com/android/keyguard/CarrierText.java  
  5. @@ -502,8 +502,21 @@ public class CarrierText extends TextView {  
  6.    
  7.          /// M: added for CDMA card type is locked.  
  8.          if (carrierText != null) {  
  9. -            carrierText = mCarrierTextExt.customizeCarrierTextWhenCardTypeLocked(  
  10. -                    carrierText, mContext, phoneId, mIsLockedCard).toString();  
  11. +          //  carrierText = mCarrierTextExt.customizeCarrierTextWhenCardTypeLocked(  
  12. +          //          carrierText, mContext, phoneId, mIsLockedCard).toString();  
  13. +  
  14. +            String mCarrier = carrierText.toString().toUpperCase();  
  15. +            if(mCarrier.equals("WOM 3G - WOM") || mCarrier.equals("WOM 3G")|| mCarrier.contains("WOM")){  
  16. +                Log.d(TAG, "gjl carrierText=" + carrierText);   
  17. +                carrierText = "WOM";  
  18. +            }else if (mCarrier.equals("VIRGIN 3G - VIRGIN") || mCarrier.equals("VIRGIN 3G")|| mCarrier.contains("VIRGIN")) {  
  19. +                carrierText = "VIRGIN";  
  20. +            }else{  
  21. +                carrierText = mCarrierTextExt.customizeCarrierTextWhenCardTypeLocked(  
  22. +                        carrierText, mContext, phoneId, mIsLockedCard).toString();  
  23. +                Log.d(TAG, "2gjl carrierText=" + carrierText);  
  24. +            }  
  25. +  
  26.          }  
  27.          Log.d(TAG, "getCarrierTextForSimState simState=" + simState +  
  28.              " text(carrierName)=" + text + " HNB=" + hnbName +  
  29. diff --git a/base/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/base/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java  
  30. index d55c23f..e653f31 100644  
  31. --- a/base/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java  
  32. +++ b/base/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java  
  33. @@ -151,7 +151,12 @@ public class CellularTile extends QSTile<QSTile.SignalState> {  
  34.          state.label = cb.enabled  
  35.                  ? removeTrailingPeriod(cb.enabledDesc)  
  36.                  : r.getString(R.string.quick_settings_rssi_emergency_only);  
  37. -  
  38. +         if (state.label != null && (state.label.toUpperCase().equals("WOM 3G - WOM") || state.label.toUpperCase().contains("WOM 3G"))){  
  39. +             state.label = "WOM";  
  40. +            }  
  41. +         if (state.label != null && (state.label.toUpperCase().equals("VIRGIN 3G - VIRGIN") || state.label.toUpperCase().contains("VIRGIN 3G"))){  
  42. +             state.label = "VIRGIN";  
  43. +            }  
  44.          final String signalContentDesc = cb.enabled && (cb.mobileSignalIconId > 0)  
  45.                  ? cb.signalContentDescription  
  46.                  : r.getString(R.string.accessibility_no_signal);  


十五:去掉五点触摸

device/

[java]  view plain  copy
  1. diff --git a/vanzo/n372b/device.mk b/vanzo/n372b/device.mk  
  2. index 5149616..c2cbe23 100644  
  3. --- a/vanzo/n372b/device.mk  
  4. +++ b/vanzo/n372b/device.mk  
  5. @@ -124,7 +124,6 @@ ifeq ($(strip $(CUSTOM_KERNEL_TOUCHPANEL)),generic)  
  6.  else  
  7.    PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.faketouch.xml:system/etc/permissions/android.hardware.faketouch.xml  
  8.    PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.touchscreen.multitouch.distinct.xml:system/etc/permissions/android.hardware.touchscreen.multitouch.distinct.xml  
  9. -  PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:system/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml  
  10.    PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.touchscreen.multitouch.xml:system/etc/permissions/android.hardware.touchscreen.multitouch.xml  
  11.    PRODUCT_COPY_FILES += frameworks/native/data/etc/android.hardware.touchscreen.xml:system/etc/permissions/android.hardware.touchscreen.xml  
  12.  endif  


十六:桌面文件名称显示不全

(packages/apps/Launcher3/res/values/styles.xml)

[java]  view plain  copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!--  
  3. /* 
  4. * Copyright (C) 2008 The Android Open Source Project 
  5. * 
  6. * Licensed under the Apache License, Version 2.0 (the "License"); 
  7. * you may not use this file except in compliance with the License. 
  8. * You may obtain a copy of the License at 
  9. * 
  10. *      http://www.apache.org/licenses/LICENSE-2.0 
  11. * 
  12. * Unless required by applicable law or agreed to in writing, software 
  13. * distributed under the License is distributed on an "AS IS" BASIS, 
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  15. * See the License for the specific language governing permissions and 
  16. * limitations under the License. 
  17. */  
  18. -->  
  19.   
  20. <resources>  
  21.   
  22.     <style name="Icon">  
  23.         <item name="android:layout_width">match_parent</item>  
  24.         <item name="android:layout_height">match_parent</item>  
  25.         <item name="android:layout_gravity">center</item>  
  26.         <item name="android:gravity">center_horizontal</item>  
  27.         <item name="android:singleLine">false</item>  
  28.         <item name="android:maxLines">2</item>  
  29.          <item name="android:drawablePadding">-4dp</item>  
  30.         <item name="android:ellipsize">marquee</item>  
  31.         <item name="android:textColor">@color/workspace_icon_text_color</item>  
  32.         <item name="android:shadowRadius">2.0</item>  
  33.         <item name="android:shadowColor">#B0000000</item>  
  34.         <item name="android:fontFamily">sans-serif-condensed</item>  
  35.     </style>  
  36.      <style name="Icon.AllApps">  
  37.          <item name="android:background">@null</item>  
  38.          <item name="android:textColor">@color/quantum_panel_text_color</item>  
  39.          <item name="android:drawablePadding">0dp</item>  
  40.          <item name="android:shadowRadius">0</item>  
  41.          <item name="customShadows">false</item>  
  42.      </style>  
  43. </resources>  


十七:内置视频

在system/etc下有一份tree不出来的文件,进到system/etc目录,然后ll一下,会有一份.keeplist文件,进入并修改为

[java]  view plain  copy
  1. /system/media/~~~.mp4  /data/media/Movies/~~~.mp4  
  2. /system/media/~~~.mp4  /data/media/Movies/~~~.mp4  
  3. /system/media/~~~.mp4  /data/media/Movies/~~~.mp4  

在system/media中放入mp4资源

在资源配置清单packages.xml中

[java]  view plain  copy
  1. <package name="~~~">  
  2.        <file dst="system" src="~~~/system" />  
  3.        <file dst="data/media/Movies/~~~.mp4" src="~~~/system/media/~~~.mp4" />  
  4.        <file dst="data/media/Movies/~~~.mp4" src="~~~/system/media/~~~.mp4" />  
  5.        <file dst="data/media/Movies/~~~.mp4" src="~~~/system/media/~~~.mp4" />  
  6. </package>  

(bootable/)

[java]  view plain  copy
  1. diff --git a/recovery/recovery.cpp b/recovery/recovery.cpp  
  2. index 40e7660..401e396 100644  
  3. --- a/recovery/recovery.cpp  
  4. +++ b/recovery/recovery.cpp  
  5. @@ -61,6 +61,14 @@  
  6.  #include "mt_recovery.h"  
  7.  #include "mt_partition.h"  
  8.    
  9. +/*  
  10. + * added for define 
  11. + */  
  12. +#define MAX_SIZE        512  
  13. +#define KEEP_LIST_FILE "/system/etc/.keeplist"  
  14. +#define DATA_MEDIA_DIR "/data/media"  
  15. +//  
  16. +  
  17.  /*  
  18.   */  
  19.  //adupsfota start  
  20. @@ -466,6 +474,213 @@ finish_recovery(const char *send_intent) {  
  21.      sync();  // For good measure.  
  22.  }  
  23.    
  24. +/*  
  25. + * added for media file to restore 
  26. + */  
  27. +  
  28. +/*added by wf*/  
  29. +void ltrim(char *s)  
  30. +{  
  31. +   int l=0,p=0,k=0;  
  32. +   l = strlen(s);  
  33. +   if( l == 0 ) return;  
  34. +   p = 0;  
  35. +   while(isspace(s[p]))  p++;  
  36. +   if( p == 0 ) return;  
  37. +   while( s[k] != '\0') s[k++] = s[p++];  
  38. +   return;  
  39. +}  
  40. +  
  41. +void rtrim(char *s)  
  42. +{  
  43. +   int l=0,p=0;  
  44. +   l = strlen(s);  
  45. +   if( l == 0 ) return;  
  46. +   p = l -1;  
  47. +   while( isspace(s[p]) ) {  
  48. +       s[p--] = '\0';  
  49. +       if( p < 0 ) break;  
  50. +   }  
  51. +   return;  
  52. +}  
  53. +  
  54. +void trim(char *vspStr)  
  55. +{  
  56. +   if(!vspStr){  
  57. +       return ;  
  58. +   }  
  59. +   ltrim(vspStr);  
  60. +   rtrim(vspStr);  
  61. +}  
  62. +char *get_dir_name(char *dir)  
  63. +{  
  64. +   char work[MAX_SIZE]={0};  
  65. +   strcpy(work,dir);     
  66. +   char *p=strrchr(work,'/');  
  67. +   if(p){  
  68. +       p++;  
  69. +       if(*p){  
  70. +           *p=0;  
  71. +           LOGE("in gdn the work is %s\n",work);  
  72. +           return strdup(work);  
  73. +       }  
  74. +       LOGE("the last is /,so return the whole str\n");  
  75. +       return strdup(work);  
  76. +         
  77. +   }  
  78. +   return NULL;  
  79. +  
  80. +}  
  81. +int mkdir_p(const char *sPathName)   
  82. +{  
  83. +   char DirName[MAX_SIZE]={0};  
  84. +   int i,len;  
  85. +  
  86. +   if(!sPathName){  
  87. +       LOGE("sPathName is null in mp\n");  
  88. +       return -1;  
  89. +   }  
  90. +   LOGE("enter mp path is %s\n",sPathName);  
  91. +   if (!access(sPathName, R_OK)) {  
  92. +       LOGE("already exist in mp\n");  
  93. +       return 0;  
  94. +   }  
  95. +  
  96. +   strcpy(DirName, sPathName);  
  97. +   len = strlen(DirName);  
  98. +   if (DirName[len - 1] != '/') {  
  99. +       strcat(DirName, "/");  
  100. +   }  
  101. +   len = strlen(DirName);  
  102. +  
  103. +   for (i=1; i<len; i++) {  
  104. +       if (DirName[i] == '/') {  
  105. +           DirName[i] = 0;  
  106. +           if (access(DirName, R_OK) != 0) {  
  107. +               if (mkdir(DirName, 0777) == -1) {  
  108. +                   LOGE("mkdir 0777 error,pid %d, ppid %d \n",getpid(),getppid());  
  109. +                   return -1;  
  110. +               }  
  111. +            }  
  112. +            if(chown(DirName,1023,1023) == -1){  
  113. +                LOGE("chown %s to 1023 error\n",DirName);  
  114. +            }  
  115. +            if(chmod(DirName,0755) == -1){  
  116. +                LOGE("chmod %s error 755\n",DirName);  
  117. +            }  
  118. +           DirName[i] = '/';  
  119. +       }  
  120. +   }  
  121. +   return 0;  
  122. +}  
  123. +  
  124. +int copy_one_file(const char *szSource, const char *dst)   
  125. +{  
  126. +   int   in_fd, out_fd, n_chars;  
  127. +   char  buf[4096];  
  128. +   if(!szSource || !dst){  
  129. +        LOGE("wyl szSource or dst is null\n");  
  130. +       return -1;  
  131. +   }  
  132. +  
  133. +   char szDest[MAX_SIZE]={0};  
  134. +   strcat(szDest,dst);  
  135. +   if(!access(dst,R_OK)){  
  136. +        LOGE("wyl %s already existed\n",dst);  
  137. +        return -1;  
  138. +   }  
  139. +   /*here judge the available size*/  
  140. +   struct stat file_stat;  
  141. +   if(lstat(szSource, &file_stat) < 0) {  
  142. +        LOGE("wyl %s can not be accessed\n",szSource);   
  143. +       return -1;  
  144. +   }  
  145. +  
  146. +    char *dir_name=get_dir_name(szDest);  
  147. +    if(dir_name){  
  148. +        mkdir_p(dir_name);  
  149. +        free(dir_name);  
  150. +        if(access(dir_name,R_OK)){  
  151. +            LOGE("wyl why dir_name %s not exist\n",dir_name);  
  152. +        }  
  153. +    }  
  154. +  
  155. +   int result = -1;  
  156. +   if ((in_fd = open(szSource, O_RDONLY)) != -1 ) {  
  157. +        LOGE("wyl open %s success\n",szSource);  
  158. +       if ((out_fd = open(szDest, O_RDONLY)) != -1 ) {  
  159. +            LOGE("wyl open %s fd:%d\n",szDest,out_fd);  
  160. +           close(out_fd);  
  161. +           unlink(szDest);  
  162. +       }  
  163. +  
  164. +       if ((out_fd = open(szDest,O_RDWR|O_CREAT,0644)) != -1){  
  165. +            LOGE("open dst %s success \n",szDest);  
  166. +           while ((n_chars = read(in_fd , buf, 4096)) > 0) {  
  167. +               write(out_fd, buf, n_chars);  
  168. +           }  
  169. +           close(out_fd);  
  170. +       }else{  
  171. +            LOGE("open dst %s error:%s\n",szDest,strerror(errno));  
  172. +           close(in_fd);  
  173. +            return -1;  
  174. +        }  
  175. +       close(in_fd);  
  176. +        return 0;  
  177. +   }else{  
  178. +        return -1;  
  179. +    }  
  180. +  
  181. +}  
  182. +  
  183. +/*above is added by wf*/  
  184. +static void restore_files()  
  185. +{  
  186. +    /*here to read keep list and recovery*/  
  187. +    LOGE("wyl enter restore_files\n");  
  188. +    int ret = ensure_path_mounted(KEEP_LIST_FILE);  
  189. +    if(ret == 0){  
  190. +        ret = ensure_path_mounted(DATA_MEDIA_DIR);  
  191. +        if(ret != 0){  
  192. +            LOGE("wyl mount data error\n");  
  193. +            return;  
  194. +        }  
  195. +        LOGE("wyl ensure_path_mounted success\n");  
  196. +        FILE *fp = fopen_path(KEEP_LIST_FILE, "r");  
  197. +        if (fp == NULL) {  
  198. +            LOGE("Can't open %s\n", KEEP_LIST_FILE);  
  199. +        } else {  
  200. +            LOGE("open %s success\n",KEEP_LIST_FILE);  
  201. +            char buffer[MAX_SIZE]={0};  
  202. +            while(fgets(buffer,MAX_SIZE-1,fp) != NULL){  
  203. +                trim(buffer);  
  204. +                char *p=strstr(buffer," ");  
  205. +                *p=0;  
  206. +                char *src=buffer;  
  207. +                p++;  
  208. +                char *dst=p;  
  209. +                trim(src);  
  210. +                trim(dst);  
  211. +                if(copy_one_file(src,dst) != 0){  
  212. +                    LOGE("wyl copy_one_file %s to %s failed\n",src,dst);  
  213. +                }else{  
  214. +                    LOGE("wyl copy_one_file %s to %s success\n",src,dst);  
  215. +                    if(chown(dst,1023,1023) == -1){  
  216. +                        LOGE("chown %s to 1023 error\n",dst);  
  217. +                    }  
  218. +                    if(chmod(dst,0644) == -1){  
  219. +                        LOGE("chmod %s 644 error\n",dst);  
  220. +                    }  
  221. +                }  
  222. +            }  
  223. +            fclose(fp);  
  224. +        }  
  225. +    }else{  
  226. +        LOGE("wyl ensure_path_mounted failed\n");  
  227. +    }  
  228. +    sync();  
  229. +}  
  230. +//   
  231.  typedef struct _saved_log_file {  
  232.      char* name;  
  233.      struct stat st;  
  234. @@ -557,7 +772,15 @@ bool erase_volume(const char* volume) {  
  235.          tmplog_offset = 0;  
  236.          copy_logs();  
  237.      }  
  238. -  
  239. +/*  
  240. + * if data restore the media data 
  241. + */  
  242. +    bool is_data = (strcmp(volume, "/data") == 0);  
  243. +    LOGE("in erase_volume wyl is_data is %d\n",is_data);  
  244. +    if(is_data){  
  245. +        restore_files();  
  246. +    }  
  247. +//   
  248.      return (result == 0);  
  249.  }  
  250.    
(external/)

[java]  view plain  copy
  1. diff --git a/sepolicy/recovery.te b/sepolicy/recovery.te  
  2. index cbea70e..d052d3a 100644  
  3. --- a/sepolicy/recovery.te  
  4. +++ b/sepolicy/recovery.te  
  5. @@ -58,6 +58,11 @@ recovery_only(`  
  6.    
  7.    access_kmsg(recovery)  
  8.    
  9. +  
  10. +  allow recovery media_rw_data_file:dir create_dir_perms;  
  11. +  allow recovery media_rw_data_file:file create_file_perms;  
  12. +  allow recovery media_rw_data_file:file { getattr read write };  
  13. +  
  14.    # Access /dev/android_adb or /dev/usb-ffs/adb/ep0  
  15.    allow recovery adb_device:chr_file rw_file_perms;  
  16.    allow recovery functionfs:dir search;  

(build/)

[java]  view plain  copy
  1. diff --git a/tools/releasetools/add_img_to_target_files.py b/tools/releasetools/add_img_to_target_files.py  
  2. index aa5e8d0..116950f 100755  
  3. --- a/tools/releasetools/add_img_to_target_files.py  
  4. +++ b/tools/releasetools/add_img_to_target_files.py  
  5. @@ -327,7 +327,6 @@ def AddImagesToTargetFiles(filename):  
  6.      banner("custom")  
  7.      AddCustom(output_zip)  
  8.    banner("userdata")  
  9. -  AddUserdata(output_zip)  
  10.    banner("cache")  
  11.    AddCache(output_zip)  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值