【第三方——Twitter】无法给好友发送录制的视频]
frameworks/av/media/libmediaplayerservice/StagefrightRecorder.cpp
#ifdef MTK_AOSP_ENHANCEMENT
//checkVideoEncoderCapabilitiesEx();
#endif
默认打开电量百分百显示
1.文件路径:
packages\apps\Settings\src\com\android\settings\display\BatteryPercentagePreferenceController.java
SHOW_BATTERY_PERCENT后面的默认值修改为 1 即可
Phone , Message , Contacts application unable to open in low memory condition- Storage shown as 100% 确保这几个应用uid小于resuid:10010,在内存较低时仍然有机会正常运行
// #ifdef 1
// add scan the high priority app first,app must not too much
boolean scanHighAppFirst = true;
ArrayList<String> exceptApps = new ArrayList<String>(); //mulit list please use "{module1}{module2}..."
if(scanHighAppFirst){
File launcherAppDir = new File(Environment.getRootDirectory(), "priv-app/SearchLauncher");
File mediaProviderDir = new File(Environment.getRootDirectory(), "priv-app/MtkMediaProvider");
File dialerAppDir = new File(Environment.getRootDirectory(), "priv-app/MtkDialer");
File mmsAppDir = new File(Environment.getRootDirectory(), "priv-app/MtkMms");
File phoneAppDir = new File(Environment.getRootDirectory(), "priv-app/MtkTeleService");
if(launcherAppDir.exists()){
exceptApps.add("SearchLauncher");
scanSingleFile(
launcherAppDir, mDefParseFlags
| PackageParser.PARSE_IS_SYSTEM
| PackageParser.PARSE_IS_SYSTEM_DIR
| PackageParser.PARSE_IS_PRIVILEGED, scanFlags, 0
);
}
if(mediaProviderDir.exists()){
exceptApps.add("MtkMediaProvider");
scanSingleFile(
mediaProviderDir, mDefParseFlags
| PackageParser.PARSE_IS_SYSTEM
| PackageParser.PARSE_IS_SYSTEM_DIR
| PackageParser.PARSE_IS_PRIVILEGED, scanFlags, 0
);
}
if(dialerAppDir.exists()){
exceptApps.add("MtkDialer");
scanSingleFile(
dialerAppDir, mDefParseFlags
| PackageParser.PARSE_IS_SYSTEM
| PackageParser.PARSE_IS_SYSTEM_DIR
| PackageParser.PARSE_IS_PRIVILEGED, scanFlags, 0
);
}
if(mmsAppDir.exists()){
exceptApps.add("MtkMms");
scanSingleFile(
mmsAppDir, mDefParseFlags
| PackageParser.PARSE_IS_SYSTEM
| PackageParser.PARSE_IS_SYSTEM_DIR
| PackageParser.PARSE_IS_PRIVILEGED, scanFlags, 0
);
}
if(phoneAppDir.exists()){
exceptApps.add("MtkTeleService");
scanSingleFile(
phoneAppDir, mDefParseFlags
| PackageParser.PARSE_IS_SYSTEM
| PackageParser.PARSE_IS_SYSTEM_DIR
| PackageParser.PARSE_IS_PRIVILEGED, scanFlags, 0
);
}
}
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "scanDir");
try {
scanDirLI(privilegedAppDir, mDefParseFlags
| PackageParser.PARSE_IS_SYSTEM
| PackageParser.PARSE_IS_SYSTEM_DIR
| PackageParser.PARSE_IS_PRIVILEGED, scanFlags, 0,exceptApps);
} finally {
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
}
//#else
//scanDirTracedLI(privilegedAppDir, mDefParseFlags
// | PackageParser.PARSE_IS_SYSTEM
// | PackageParser.PARSE_IS_SYSTEM_DIR
// | PackageParser.PARSE_IS_PRIVILEGED, scanFlags, 0);
// #endif
[将设置为联系人为T卡里面的歌曲作为铃声删除,该联系人来电不会恢复到默认铃声,也不是手机里面的铃声
vendor/mediatek/proprietary/packages/services/Telecomm / src/com/android/server/telecom/RingtoneFactory.java
if (slotIndex != -1) {
if (slotIndex == SIM1_INDEX) {
ringtoneUri = vailRingtoneUri(ringtoneUri, Settings.System.RINGTONE, RingtoneManager.KEY_DEFAULT_RINGTONE);
} else {
ringtoneUri = vailRingtoneUri(ringtoneUri, Settings.System.RINGTONE1, RingtoneManager.KEY_DEFAULT_RINGTONE);
}
}
return ringtoneUri;
}
private Uri vailRingtoneUri(Uri ringtoneUri,String defaultSettingKey,String defaultRestoreKey) {
String defaultRingtone = Settings.System.getString(mContext.getContentResolver(),
defaultSettingKey);
if (TextUtils.isEmpty(defaultRingtone)) {
ringtoneUri = null;
}else{
Uri defaultUri = Uri.parse(defaultRingtone);
if (ContentProvider.getUserIdFromUri(defaultUri) == mContext.getUserId()) {
defaultUri = ContentProvider.getUriWithoutUserId(defaultUri);
}
if (-1 == RingtoneManager.validRingtone(mContext,defaultUri,RingtoneManager.TYPE_RINGTONE)) {
ringtoneUri = Uri
.parse(Settings.System.getString(mContext.getContentResolver(), defaultRestoreKey));
} else {
ringtoneUri = defaultUri;
}
vendor/mediatek/proprietary/packages/services/Telecomm / src/com/android/server/telecom/RingtoneFactory.java
Log.d(this, "getRingtone ringtoneUri : " + ringtoneUri);
if(ringtoneUri == null || -1 == RingtoneManager.validRingtone(mContext, ringtoneUri, RingtoneManager.TYPE_RINGTONE)){
ringtoneUri = getDefaultRingtoneUriForSim(incomingCall);
}
USB授权不弹框
frameworks/base / packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java
// add end for user: adb shell
if ( SystemProperties.getInt("lava.adb.debug",0) == 1 ){
Log.d(TAG, "UsbDisconnectedReceiver save finger");
try {
IBinder b = ServiceManager.getService(USB_SERVICE);
IUsbManager service = IUsbManager.Stub.asInterface(b);
service.allowUsbDebugging(true, mKey);
} catch (Exception e) {
Log.e(TAG, "Unable to notify Usb service", e);
}
mActivity.finish();
return;
}
// add start for user: adb shell
public boolean hasSerialFunction() {
if("in".equals(SystemProperties.get("ro.lava.countryversion"))) return true;
boolean flag = false;
// Test115A000001 P1PP110P
String sn = SystemProperties.get("gsm.serial");
if (sn != null && (!"".equals(sn))) {
char[] barcodes = sn.toCharArray();
if(barcodes.length >= 57)
{
if('1' == barcodes[56])
{
flag = true;
}
else
{
flag = false;
}
}
}
return flag;
}
// add end for user: adb shell
frameworks/base / services/usb/java/com/android/server/usb/UsbDeviceManager.java
public UsbDeviceManager(Context context, UsbAlsaManager alsaManager,
UsbSettingsManager settingsManager) {
mContext = context;
mUsbAlsaManager = alsaManager;
mSettingsManager = settingsManager;
mContentResolver = context.getContentResolver();
PackageManager pm = mContext.getPackageManager();
mHasUsbAccessory = pm.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY);
//add start for user: adb shell
boolean hasSerial = hasSerialFunction();
if (!hasSerial) {
SystemProperties.set("persist.sys.usb.config", "mtp,adb");
}
规避因为低内存导致应用运行不了的问题
alps/kernel-4.9 / drivers/staging/android/lowmemorykiller.c lowmem_scan(
rcu_read_lock();
for_each_process(tsk) {
struct task_struct *p;
short oom_score_adj;
/* MTK begin for 2GB Bench-marking antutu*/
if(tsk->comm){
if((strstr(tsk->comm,"tutu.ABenchMark")!=NULL)
||(strstr(tsk->comm,"ABenchMark:push")!=NULL)
||(strstr(tsk->comm,"benchmark:full")!=NULL)
||(strstr(tsk->comm,"myapplication")!=NULL)
||(strstr(tsk->comm,"GloftA9HM")!=NULL)
){
lowmem_print(1,"MTK_lowmemorykiller_2 jump kill 'tutu.ABenchMark' 'ABenchMark:push' 'benchmark:full' 'myapplication' ,'GloftA9HM'\n");
continue;
}
}
/* MTK end */
第三方应用(淘宝)退出后台后异常CPU占用,导致onStop超时的情况
platform/frameworks/base / services/core/java/com/android/server/am/ActivityStack.java
case STOP_TIMEOUT_MSG: {
ActivityRecord r = (ActivityRecord)msg.obj;
//#ifdef 1
//dd after activity stop ,kill process if cpu loading is too high
if(r.app!=null) {
try{
long diff = mService.mProcessCpuTracker.getCpuTimeForPid(r.app.pid)- r.cpuTimeAtStop;
Slog.w(TAG, "Activity stop timeout r=" +r+";cpu time is:"+diff);
if(diff >2500) { // 25% occupied in 10s for one core ,we think in that case cpu loading is high for background,need to kill
mService.removeProcessLocked(r.app,false,false,"kill because cpu loading too high");
break ;
}
}catch(Exception e){
Slog.w(TAG, "Activity stop timeout and kill app error"+r,e);
}
}
//#endif
final void stopActivityLocked(ActivityRecord r) {
r.cpuTimeAtStop = mService.mProcessCpuTracker.getCpuTimeForPid(r.app.pid);
sos拨号 frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
interceptKeyBeforeQueueing -----》KEYCODE_HALL_DOWN
if(!isCallRinging()){
dialEmergencyNumberForTriplePower(keyCode,down);
}
// SOS
final String TRIPLE_POWER_DIAL_EMERGENCY_NUMBER = "112";
final String countryversion = SystemProperties.get("ro.lava.countryversion", "");
final long[] mVolumeHits = new long[3];
Intent emergencyDialIntent = new Intent(Intent.ACTION_CALL_EMERGENCY);
final String DIAL_IN_EMERGENCY_COUNTRY = "in";
final String DIAL_EGY_EMERGENCY_COUNTRY = "egy";
private void dialEmergencyNumberForTriplePower(final int keyCode, boolean isDown) {
Log.d(TAG, "[dialEmergencyNumberForTriplePower] entry countryversion = " + countryversion);
if (DIAL_IN_EMERGENCY_COUNTRY.equals(countryversion)
|| DIAL_EGY_EMERGENCY_COUNTRY.equals(countryversion)) {
final long time = SystemClock.uptimeMillis();
Log.d(TAG, "zeyCode= " + keyCode);
if (keyCode == KeyEvent.KEYCODE_POWER && isDown) {
System.arraycopy(mVolumeHits, 1, mVolumeHits, 0, mVolumeHits.length - 1);
mVolumeHits[mVolumeHits.length - 1] = SystemClock.uptimeMillis();
final long currentTime = (SystemClock.uptimeMillis());
boolean result = mVolumeHits[0] >= (currentTime - 800);
Log.d(TAG, "[dialEmergencyNumberForTriplePower] triple click volume: result = " + result + " value = "
+ mVolumeHits[0] + "#" + mVolumeHits[1] + "#" + mVolumeHits[2]);
if (result) {
// #ifdef 1
for (int i = 0; i < mVolumeHits.length; i++) {
mVolumeHits[i] = 0;
}
//#endif
// EmergencyOutgoingCallBroadcaster
emergencyDialIntent.setClassName("com.android.server.telecom", "com.android.server.telecom.EmergencyCallActivity");
emergencyDialIntent.addCategory(Intent.CATEGORY_DEFAULT);
emergencyDialIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
emergencyDialIntent.setData(Uri.parse("tel:" + TRIPLE_POWER_DIAL_EMERGENCY_NUMBER));
mContext.startActivity(emergencyDialIntent);
}
}
}
}
private boolean isCallRinging() {
TelecomManager telecomManager = getTelecommService();
if (telecomManager != null) {
return telecomManager.isRinging();
}
return false;
}
默认12小时
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
loadStringSetting(stmt, Settings.System.TIME_12_24,
R.string.def_time_is24hours);
<string name="def_time_is24hours">"12"</string>
第三方预置,operator目录下UC浏览器显示页面显示异常
alps/device/mediatek/sepolicy/basic / non_plat/untrusted_app.te
allow untrusted_app_25 system_data_file:file { execute open };
allow untrusted_app_25 system_data_file:dir { read open };
allow untrusted_app_27 system_data_file:file { execute open };
allow untrusted_app_27 system_data_file:dir { read open };
f2fs 低于128M限制resuid <10010 使用data区
1:alps/vendor/mediatek/proprietary/hardware/fstab / mt6765/fstab.in.mt6761
//,20181029,f2fs limit space
//#define FS_FLAG_DATA noatime,nosuid,nodev,discard,noflush_merge
#define FS_FLAG_DATA noatime,nosuid,nodev,discard,noflush_merge,reserve_root=32768,resuid=10010,resgid=10010,usrquota
//#endif
2:alps/kernel-4.9 / fs/f2fs/f2fs.h
static inline bool __allow_reserved_blocks(struct f2fs_sb_info *sbi,
struct inode *inode, bool cap)
{
if (!inode)
return true;
if (!test_opt(sbi, RESERVE_ROOT))
return false;
if (IS_NOQUOTA(inode))
return true;
//,20181029,f2fs limit space
if (uid_gte(F2FS_OPTION(sbi).s_resuid, current_fsuid()))
return true;
//#endif
3:alps/kernel-4.9 / fs/f2fs/super.c
static inline void limit_reserve_root(struct f2fs_sb_info *sbi)
{
//liuweibo,20181029,f2fs limit space
//block_t limit = (sbi->user_block_count << 1) / 1000;
block_t limit = (sbi->user_block_count << 1) / 50;
//#endif
手机设置语音慢,加一个提示
vendor/mediatek/proprietary/packages/apps/MtkSettings / src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
import android.app.ProgressDialog;
private ProgressDialog mProgressDialog;
private void showProgressDialog(Context context) {
mProgressDialog = new ProgressDialog(context);
mProgressDialog.setIndeterminate(false);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.setCancelable(false);
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.setMessage(context.getResources().getString(R.string.language_picker_title));
mProgressDialog.show();
}
private void dismissDialog(){
Log.d("test", "dismissDialog");
if(mProgressDialog != null){
mProgressDialog.dismiss();
mProgressDialog =null;
} }
public void updateLocalesWhenAnimationStops(final LocaleList localeList) {
if (localeList.equals(mLocalesToSetNext)) {
return;
}
showProgressDialog(mContext);// test
onAnimationsFinished{
dismissDialog();
}
空间大小调整
device/lavap / k61v1_32_op55_go/BoardConfig.mk
#Config partition size
-include $(MTK_PTGEN_OUT)/partition_size.mk
ifneq ($(strip $(MTK_AB_OTA_UPDATER)), yes)
BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := ext4
endif
BOARD_FLASH_BLOCK_SIZE := 4096
BOARD_MTK_SYSTEM_SIZE_KB := 1572864
BOARD_MTK_VENDOR_SIZE_KB := 215040