本章主要分析google settings里面存储模块的代码。
存储模块所在的fragment为:
<!-- Storage -->
<header
android:id="@+id/storage_settings"
android:fragment="com.android.settings.deviceinfo.Memory"
android:icon="@drawable/ic_settings_storage"
android:title="@string/storage_settings" />
我们现在看Memory这个类
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
final Context context = getActivity();
mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
mStorageManager = StorageManager.from(context);
mStorageManager.registerListener(mStorageListener);
addPreferencesFromResource(R.xml.device_info_memory);
addCategory(StorageVolumePreferenceCategory.buildForInternal(context));
final StorageVolume[] storageVolumes = mStorageManager.getVolumeList();
for (StorageVolume volume : storageVolumes) {
if (!volume.isEmulated()) {
addCategory(StorageVolumePreferenceCategory.buildForPhysical(context, volume));
}
}
setHasOptionsMenu(true);
}
在onCreate函数中,主要做了几件事情:
1.各种初始化
2.实例化布局,最主要是对Category的添加
3.获取当前挂载的volume,并且实例化为Category
Category最主要的是StorageVolumePreferenceCategory,构造函数如下:
/**
* Build category to summarize specific physical {@link StorageVolume}.
*/
public static StorageVolumePreferenceCategory buildForPhysical(
Context context, StorageVolume volume) {
return new StorageVolumePreferenceCategory(context, volume);
}
private StorageVolumePreferenceCategory(Context context, StorageVolume volume) {
super(context);
mVolume = volume;
mMeasure = StorageMeasurement.getInstance(context, volume);
mResources = context.getResources();
mStorageManager = StorageManager.from(context);
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
setTitle(volume != null ? volume.getDescription(context)
: context.getText(R.string.internal_storage));
}