Android P 添加存储容量显示和已开机时间选项

在这里插入图片描述
vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values-zh-rCN/strings.xml

 <string name="storage_info">存储容量</string>   
    <string name="storage_total">总共容量: </string>
    <string name="storage_free">剩余空间: </string>

vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml/my_device_info.xml

 <!-- add storage -->
    <Preference
        android:key="storage_info"
        android:order="53"
        android:title="@string/storage_info"
        android:summary="@string/summary_placeholder"/>

    <!--  add uptime -->    
    <Preference
        android:enabled="false"
        android:key="up_time"
        android:order="54"
        android:persistent="false"
        android:shouldDisableView="false"
        android:summary="@string/summary_placeholder"
        android:title="@string/status_up_time" /> 

vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java

 import com.android.settings.deviceinfo.imei.ImeiInfoPreferenceController;
 import com.android.settings.deviceinfo.simstatus.SimStatusPreferenceController;
+import com.android.settings.deviceinfo.StorageInfoPreferenceController;// add storage
+import com.android.settings.deviceinfo.UpdateTimePreferenceController;// add uptime
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.widget.EntityHeaderController;
 import com.android.settingslib.core.AbstractPreferenceController;
@@ -68,6 +70,7 @@ public class MyDeviceInfoFragment extends DashboardFragment
 
     private static final String KEY_MY_DEVICE_INFO_HEADER = "my_device_info_header";
     private static final String KEY_LEGAL_CONTAINER = "legal_container";
+    private static UpdateTimePreferenceController mUpdateTimePreferenceController;//add uptime
 
     @Override
     public int getMetricsCategory() {
@@ -82,9 +85,18 @@ public class MyDeviceInfoFragment extends DashboardFragment
     @Override
     public void onResume() {
         super.onResume();
+        mUpdateTimePreferenceController.onResume();/ add uptime
         initHeader();
     }
 
+    // add uptime
+    @Override
+    public void onPause() {
+        super.onPause();
+        mUpdateTimePreferenceController.onPause();
+    }
+    // end uptime
+
     @Override
     protected String getLogTag() {
         return LOG_TAG;
@@ -109,6 +121,9 @@ public class MyDeviceInfoFragment extends DashboardFragment
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         controllers.add(new EmergencyInfoPreferenceController(context));
         /// M: Revise for updating phone number.
+        mUpdateTimePreferenceController = new UpdateTimePreferenceController(context);// add uptime
+        controllers.add(mUpdateTimePreferenceController);// add uptime
+        controllers.add(new StorageInfoPreferenceController(context));//add storage
         controllers.add(new PhoneNumberPreferenceController(context, lifecycle));
         controllers.add(new BrandedAccountPreferenceController(context));

添加vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/deviceinfo/StorageInfoPreferenceController.java

/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.settings.deviceinfo;

import java.text.NumberFormat;

import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settings.R;
import android.content.Context;
import android.content.res.Resources;
import android.os.storage.StorageManager;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import android.text.format.Formatter;
import com.android.settingslib.deviceinfo.StorageManagerVolumeProvider;
import com.android.settingslib.deviceinfo.PrivateStorageInfo;

public class StorageInfoPreferenceController extends AbstractPreferenceController implements

		PreferenceControllerMixin {
	private static final String KEY_STORAGE_INFO = "storage_info";
	private StorageManagerVolumeProvider mStorageManagerVolumeProvider;
	private Context mContext;

	public StorageInfoPreferenceController(Context context) {
		super(context);
		mContext = context;
	}

	@Override
	public boolean isAvailable() {
		return true;
	}

	@Override
	public void displayPreference(PreferenceScreen screen) {
		super.displayPreference(screen);
		final Preference pref = screen.findPreference(KEY_STORAGE_INFO);
		if (pref != null) {
			pref.setSummary(getStorageInfo());
		}
	}

	@Override
	public String getPreferenceKey() {
		return KEY_STORAGE_INFO;
	}

	@Override
	public boolean handlePreferenceTreeClick(Preference preference) {
		return false;
	}

	private String getStorageInfo() {
		StorageManager storageManager = mContext.getSystemService(StorageManager.class);
		mStorageManagerVolumeProvider = new StorageManagerVolumeProvider(storageManager);

		NumberFormat percentageFormat = NumberFormat.getPercentInstance();
		PrivateStorageInfo info = PrivateStorageInfo.getPrivateStorageInfo(mStorageManagerVolumeProvider);
		double privateUsedBytes = info.totalBytes - info.freeBytes;
		StringBuilder builder = new StringBuilder();
		Resources res = mContext.getResources();
		builder.append(res.getString(R.string.storage_total))
				.append(Formatter.formatFileSize(mContext, info.totalBytes)).append("  ")
				.append(res.getString(R.string.storage_free))
				.append(Formatter.formatFileSize(mContext, info.freeBytes));
		return builder.toString();
	}

}

添加vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/deviceinfo/UpdateTimePreferenceController.java

/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.settings.deviceinfo;

import java.lang.ref.WeakReference;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import com.android.internal.R;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.AbstractPreferenceController;

import android.app.ActivityManager;
import android.app.Fragment;
import android.content.Context;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.SystemClock;
import android.os.storage.StorageManager;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import android.text.format.DateFormat;

public class UpdateTimePreferenceController extends AbstractPreferenceController implements

		PreferenceControllerMixin {

	private static final String KEY_UPDATE_TIME = "up_time";
	private static final int EVENT_UPDATE_STATS = 500;

	private Context mContext;
	private Preference mPref;
	private MyHandler mMyHandler;

	public UpdateTimePreferenceController(Context context) {
		super(context);
		mContext = context;
		mMyHandler = new MyHandler(this);
	}

	@Override
	public boolean isAvailable() {
		return true;
	}

	@Override
	public void displayPreference(PreferenceScreen screen) {
		super.displayPreference(screen);
		mPref = screen.findPreference(KEY_UPDATE_TIME);

	}

	@Override
	public String getPreferenceKey() {
		return KEY_UPDATE_TIME;
	}

	@Override
	public boolean handlePreferenceTreeClick(Preference preference) {
		return false;
	}

	public void onResume() {
		mMyHandler.sendEmptyMessage(EVENT_UPDATE_STATS);
	}

	public void onPause() {
		mMyHandler.removeMessages(EVENT_UPDATE_STATS);
	}

	private void updateTime() {
		long at = SystemClock.uptimeMillis() / 1000;
		long ut = SystemClock.elapsedRealtime() / 1000;
		if (ut == 0) {
			ut = 1;
		}
		if (mPref != null) {
			mPref.setSummary(convert(ut));
		}
	}

	private String pad(int n) {
		if (n >= 10) {
			return String.valueOf(n);
		} else {
			return "0" + String.valueOf(n);
		}
	}

	private String convert(long t) {
		int s = (int) (t % 60);
		int m = (int) ((t / 60) % 60);
		int h = (int) ((t / 3600));

		return h + ":" + pad(m) + ":" + pad(s);
	}

	private static class MyHandler extends Handler {

		UpdateTimePreferenceController controller;

		public MyHandler(UpdateTimePreferenceController controller) {
			super(Looper.getMainLooper());
			this.controller = controller;
		}

		@Override
		public void handleMessage(Message msg) {

			switch (msg.what) {
			case EVENT_UPDATE_STATS:
				controller.updateTime();
				sendEmptyMessageDelayed(EVENT_UPDATE_STATS, 1000);
				break;

			}
		}
	}

}

猜你喜欢

转载自blog.csdn.net/jydzm/article/details/88593261