思路:当系统将所有存储挂载完毕,然后调用StorageManagerEx.setDefaultPath(path)设置默认存储,当用户手动改变以后就跟随用户设置。
diff --git a/packages/apps/Settings/src/com/mediatek/settings/deviceinfo/StorageSettingsExts.java b/packages/apps/Settings/src/com/mediatek/settings/deviceinfo/StorageSettingsExts.java
old mode 100644
new mode 100755
index 445c7d5..0944468
--- a/packages/apps/Settings/src/com/mediatek/settings/deviceinfo/StorageSettingsExts.java
+++ b/packages/apps/Settings/src/com/mediatek/settings/deviceinfo/StorageSettingsExts.java
@@ -20,6 +20,9 @@ import com.mediatek.storage.StorageManagerEx;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+
+import android.provider.Settings;
+
public class StorageSettingsExts {
private static final String TAG = "StorageSettings";
@@ -114,6 +117,11 @@ public class StorageSettingsExts {
}
StorageManagerEx.setDefaultPath(preference.getKey());
Log.d(TAG, "Set default path : " + preference.getKey());
+
+ if (com.android.featureoption.FeatureOption.PRJ_FEATURE_REVO_B_SET_DEFAULT_STORAGE){
+ Settings.System.putInt(mActivity.getContentResolver(), "isUserSet", 1);
+ }
+
mDeafultWritePathPref = (RadioButtonPreference) preference;
return true;
}
diff --git a/packages/providers/MediaProvider/src/com/android/providers/media/MediaScannerReceiver.java b/packages/providers/MediaProvider/src/com/android/providers/media/MediaScannerReceiver.java
old mode 100644
new mode 100755
index 9c9df73..15b2d93
--- a/packages/providers/MediaProvider/src/com/android/providers/media/MediaScannerReceiver.java
+++ b/packages/providers/MediaProvider/src/com/android/providers/media/MediaScannerReceiver.java
@@ -40,6 +40,13 @@ import android.os.storage.StorageVolume;
import android.os.SystemProperties;
import android.preference.PreferenceManager;
import android.provider.MediaStore;
+
+import com.mediatek.storage.StorageManagerEx;
+import java.util.ArrayList;
+import java.util.List;
+import android.provider.Settings;
+import com.android.featureoption.FeatureOption;
+
public class MediaScannerReceiver extends BroadcastReceiver
{
@@ -58,10 +65,19 @@ public class MediaScannerReceiver extends BroadcastReceiver
static boolean sIsShutdown = !"def_value".equals(SystemProperties.get(
"sys.shutdown.requested", "def_value"));
private static final String DEVICE_MOUNT_BEFORE_BOOT = "dev.mount_before_boot";
+
+ private StorageManager storageManager;
+ private int isUserSet = 0;
+
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
+
+ storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
+ if (FeatureOption.PRJ_FEATURE_REVO_B_SET_DEFAULT_STORAGE)
+ isUserSet = Settings.System.getInt(context.getContentResolver(), "isUserSet", 0);
+
MtkLog.v(TAG, "onReceive action = " + action);
if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
MtkLog.v(TAG, "onReceive BOOT_COMPLETED, begin to scan internal and external storage.");
@@ -192,7 +208,7 @@ public class MediaScannerReceiver extends BroadcastReceiver
* @return
*/
private boolean isAllStorageMounted(Context context) {
- StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
+
StorageVolume[] ExternalVolumeList = storageManager.getVolumeList();
for (StorageVolume storageVolume : ExternalVolumeList) {
String path = storageVolume.getPath();
@@ -204,6 +220,18 @@ public class MediaScannerReceiver extends BroadcastReceiver
}
return true;
}
+
+ private StorageVolume[] getDefaultWriteDiskList() {
+ List<StorageVolume> storageVolumes = new ArrayList<StorageVolume>();
+ StorageVolume[] volumes = storageManager.getVolumeList();
+ for (StorageVolume volume : volumes) {
+ if (Environment.MEDIA_MOUNTED.equals(storageManager.getVolumeState(volume.getPath()))) {
+ storageVolumes.add(volume);
+ }
+ }
+ return storageVolumes.toArray(new StorageVolume[storageVolumes.size()]);
+ }
+
private Handler getHandler() {
@@ -221,6 +249,20 @@ public class MediaScannerReceiver extends BroadcastReceiver
scan(context, MediaProvider.EXTERNAL_VOLUME);
removeCallbacksAndMessages(null);
sHandler = null;
+
+ if (FeatureOption.PRJ_FEATURE_REVO_B_SET_DEFAULT_STORAGE &&
+ isUserSet == 0 && isAllStorageMounted(context)) {
+ StorageVolume[] availableVolumes = getDefaultWriteDiskList();
+ for (StorageVolume volume : availableVolumes) {
+ String path = volume.getPath();
+ MtkLog.v(TAG, "<getHandler> setDefaultPath = " + path);
+ if (path != null && !"/storage/emulated/0".equals(path)) {
+ StorageManagerEx.setDefaultPath(path);
+ break;
+ }
+ }
+ }
+
} else {
MtkLog.v(TAG, "Some storage has not been mounted, wait it mounted until time out.");
Message next = obtainMessage(msg.what, waitTime + CHECK_INTERVAL, -1, msg.obj);