Merge branch 'donut' of ssh://android-git.corp.google.com:29418/platform/frameworks/base into donut
This commit is contained in:
178
api/current.xml
178
api/current.xml
@@ -21795,6 +21795,184 @@
|
|||||||
</field>
|
</field>
|
||||||
</class>
|
</class>
|
||||||
</package>
|
</package>
|
||||||
|
<package name="android.backup"
|
||||||
|
>
|
||||||
|
<class name="BackupDataOutput"
|
||||||
|
extends="java.lang.Object"
|
||||||
|
abstract="false"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
<constructor name="BackupDataOutput"
|
||||||
|
type="android.backup.BackupDataOutput"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
<parameter name="context" type="android.content.Context">
|
||||||
|
</parameter>
|
||||||
|
<parameter name="fd" type="java.io.FileDescriptor">
|
||||||
|
</parameter>
|
||||||
|
</constructor>
|
||||||
|
<method name="close"
|
||||||
|
return="void"
|
||||||
|
abstract="false"
|
||||||
|
native="false"
|
||||||
|
synchronized="false"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
</method>
|
||||||
|
<method name="flush"
|
||||||
|
return="void"
|
||||||
|
abstract="false"
|
||||||
|
native="false"
|
||||||
|
synchronized="false"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
</method>
|
||||||
|
<method name="write"
|
||||||
|
return="void"
|
||||||
|
abstract="false"
|
||||||
|
native="false"
|
||||||
|
synchronized="false"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
<parameter name="buffer" type="byte[]">
|
||||||
|
</parameter>
|
||||||
|
</method>
|
||||||
|
<method name="write"
|
||||||
|
return="void"
|
||||||
|
abstract="false"
|
||||||
|
native="false"
|
||||||
|
synchronized="false"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
<parameter name="oneByte" type="int">
|
||||||
|
</parameter>
|
||||||
|
</method>
|
||||||
|
<method name="write"
|
||||||
|
return="void"
|
||||||
|
abstract="false"
|
||||||
|
native="false"
|
||||||
|
synchronized="false"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
<parameter name="buffer" type="byte[]">
|
||||||
|
</parameter>
|
||||||
|
<parameter name="offset" type="int">
|
||||||
|
</parameter>
|
||||||
|
<parameter name="count" type="int">
|
||||||
|
</parameter>
|
||||||
|
</method>
|
||||||
|
<method name="writeKey"
|
||||||
|
return="void"
|
||||||
|
abstract="false"
|
||||||
|
native="false"
|
||||||
|
synchronized="false"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
<parameter name="key" type="java.lang.String">
|
||||||
|
</parameter>
|
||||||
|
</method>
|
||||||
|
</class>
|
||||||
|
<class name="FileBackupHelper"
|
||||||
|
extends="java.lang.Object"
|
||||||
|
abstract="false"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
<constructor name="FileBackupHelper"
|
||||||
|
type="android.backup.FileBackupHelper"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
</constructor>
|
||||||
|
<method name="performBackup"
|
||||||
|
return="void"
|
||||||
|
abstract="false"
|
||||||
|
native="false"
|
||||||
|
synchronized="false"
|
||||||
|
static="true"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
<parameter name="context" type="android.content.Context">
|
||||||
|
</parameter>
|
||||||
|
<parameter name="oldSnapshot" type="android.os.ParcelFileDescriptor">
|
||||||
|
</parameter>
|
||||||
|
<parameter name="newSnapshot" type="android.os.ParcelFileDescriptor">
|
||||||
|
</parameter>
|
||||||
|
<parameter name="data" type="android.backup.BackupDataOutput">
|
||||||
|
</parameter>
|
||||||
|
<parameter name="files" type="java.lang.String[]">
|
||||||
|
</parameter>
|
||||||
|
</method>
|
||||||
|
</class>
|
||||||
|
<class name="SharedPreferencesBackupHelper"
|
||||||
|
extends="java.lang.Object"
|
||||||
|
abstract="false"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
<constructor name="SharedPreferencesBackupHelper"
|
||||||
|
type="android.backup.SharedPreferencesBackupHelper"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
</constructor>
|
||||||
|
<method name="performBackup"
|
||||||
|
return="void"
|
||||||
|
abstract="false"
|
||||||
|
native="false"
|
||||||
|
synchronized="false"
|
||||||
|
static="true"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
<parameter name="context" type="android.content.Context">
|
||||||
|
</parameter>
|
||||||
|
<parameter name="oldSnapshot" type="android.os.ParcelFileDescriptor">
|
||||||
|
</parameter>
|
||||||
|
<parameter name="newSnapshot" type="android.os.ParcelFileDescriptor">
|
||||||
|
</parameter>
|
||||||
|
<parameter name="data" type="android.backup.BackupDataOutput">
|
||||||
|
</parameter>
|
||||||
|
<parameter name="prefGroups" type="java.lang.String[]">
|
||||||
|
</parameter>
|
||||||
|
</method>
|
||||||
|
</class>
|
||||||
|
</package>
|
||||||
<package name="android.content"
|
<package name="android.content"
|
||||||
>
|
>
|
||||||
<class name="ActivityNotFoundException"
|
<class name="ActivityNotFoundException"
|
||||||
|
|||||||
44
core/java/android/backup/BackupDataOutput.java
Normal file
44
core/java/android/backup/BackupDataOutput.java
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2009 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 android.backup;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import java.io.FileDescriptor;
|
||||||
|
|
||||||
|
public class BackupDataOutput {
|
||||||
|
/* package */ FileDescriptor fd;
|
||||||
|
|
||||||
|
public static final int OP_UPDATE = 1;
|
||||||
|
public static final int OP_DELETE = 2;
|
||||||
|
|
||||||
|
public BackupDataOutput(Context context, FileDescriptor fd) {
|
||||||
|
this.fd = fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void close() {
|
||||||
|
// do we close the fd?
|
||||||
|
}
|
||||||
|
public native void flush();
|
||||||
|
public native void write(byte[] buffer);
|
||||||
|
public native void write(int oneByte);
|
||||||
|
public native void write(byte[] buffer, int offset, int count);
|
||||||
|
|
||||||
|
public native void writeOperation(int op);
|
||||||
|
public native void writeKey(String key);
|
||||||
|
}
|
||||||
|
|
||||||
68
core/java/android/backup/FileBackupHelper.java
Normal file
68
core/java/android/backup/FileBackupHelper.java
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2009 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 android.backup;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.ParcelFileDescriptor;
|
||||||
|
|
||||||
|
import java.io.FileDescriptor;
|
||||||
|
|
||||||
|
public class FileBackupHelper {
|
||||||
|
/**
|
||||||
|
* Based on oldSnapshot, determine which of the files from the application's data directory
|
||||||
|
* need to be backed up, write them to the data stream, and fill in newSnapshot with the
|
||||||
|
* state as it exists now.
|
||||||
|
*/
|
||||||
|
public static void performBackup(Context context,
|
||||||
|
ParcelFileDescriptor oldSnapshot, ParcelFileDescriptor newSnapshot,
|
||||||
|
BackupDataOutput data, String[] files) {
|
||||||
|
String basePath = context.getFilesDir().getAbsolutePath();
|
||||||
|
performBackup_checked(basePath, oldSnapshot, newSnapshot, data, files);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check the parameters so the native code doens't have to throw all the exceptions
|
||||||
|
* since it's easier to do that from java.
|
||||||
|
*/
|
||||||
|
static void performBackup_checked(String basePath,
|
||||||
|
ParcelFileDescriptor oldSnapshot, ParcelFileDescriptor newSnapshot,
|
||||||
|
BackupDataOutput data, String[] files) {
|
||||||
|
if (newSnapshot == null) {
|
||||||
|
throw new NullPointerException("newSnapshot==null");
|
||||||
|
}
|
||||||
|
if (data == null) {
|
||||||
|
throw new NullPointerException("data==null");
|
||||||
|
}
|
||||||
|
if (data.fd == null) {
|
||||||
|
throw new NullPointerException("data.fd==null");
|
||||||
|
}
|
||||||
|
if (files == null) {
|
||||||
|
throw new NullPointerException("files==null");
|
||||||
|
}
|
||||||
|
|
||||||
|
int err = performBackup_native(basePath, oldSnapshot.getFileDescriptor(),
|
||||||
|
newSnapshot.getFileDescriptor(), data.fd, files);
|
||||||
|
|
||||||
|
if (err != 0) {
|
||||||
|
throw new RuntimeException("Backup failed"); // TODO: more here
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
native private static int performBackup_native(String basePath,
|
||||||
|
FileDescriptor oldSnapshot, FileDescriptor newSnapshot,
|
||||||
|
FileDescriptor data, String[] files);
|
||||||
|
}
|
||||||
40
core/java/android/backup/SharedPreferencesBackupHelper.java
Normal file
40
core/java/android/backup/SharedPreferencesBackupHelper.java
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2009 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 android.backup;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.ParcelFileDescriptor;
|
||||||
|
|
||||||
|
import java.io.FileDescriptor;
|
||||||
|
|
||||||
|
public class SharedPreferencesBackupHelper {
|
||||||
|
public static void performBackup(Context context,
|
||||||
|
ParcelFileDescriptor oldSnapshot, ParcelFileDescriptor newSnapshot,
|
||||||
|
BackupDataOutput data, String[] prefGroups) {
|
||||||
|
String basePath = "/xxx"; //context.getPreferencesDir();
|
||||||
|
|
||||||
|
// make filenames for the prefGroups
|
||||||
|
final int N = prefGroups.length;
|
||||||
|
String[] files = new String[N];
|
||||||
|
for (int i=0; i<N; i++) {
|
||||||
|
files[i] = prefGroups[i] + ".xml";
|
||||||
|
}
|
||||||
|
|
||||||
|
FileBackupHelper.performBackup_checked(basePath, oldSnapshot, newSnapshot, data, files);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -116,7 +116,8 @@ LOCAL_SRC_FILES:= \
|
|||||||
android_ddm_DdmHandleNativeHeap.cpp \
|
android_ddm_DdmHandleNativeHeap.cpp \
|
||||||
android_location_GpsLocationProvider.cpp \
|
android_location_GpsLocationProvider.cpp \
|
||||||
com_android_internal_os_ZygoteInit.cpp \
|
com_android_internal_os_ZygoteInit.cpp \
|
||||||
com_android_internal_graphics_NativeUtils.cpp
|
com_android_internal_graphics_NativeUtils.cpp \
|
||||||
|
android_backup_FileBackupHelper.cpp
|
||||||
|
|
||||||
LOCAL_C_INCLUDES += \
|
LOCAL_C_INCLUDES += \
|
||||||
$(JNI_H_INCLUDE) \
|
$(JNI_H_INCLUDE) \
|
||||||
|
|||||||
@@ -155,6 +155,7 @@ extern int register_android_ddm_DdmHandleNativeHeap(JNIEnv *env);
|
|||||||
extern int register_com_android_internal_os_ZygoteInit(JNIEnv* env);
|
extern int register_com_android_internal_os_ZygoteInit(JNIEnv* env);
|
||||||
extern int register_android_util_Base64(JNIEnv* env);
|
extern int register_android_util_Base64(JNIEnv* env);
|
||||||
extern int register_android_location_GpsLocationProvider(JNIEnv* env);
|
extern int register_android_location_GpsLocationProvider(JNIEnv* env);
|
||||||
|
extern int register_android_backup_FileBackupHelper(JNIEnv *env);
|
||||||
|
|
||||||
static AndroidRuntime* gCurRuntime = NULL;
|
static AndroidRuntime* gCurRuntime = NULL;
|
||||||
|
|
||||||
@@ -1125,6 +1126,7 @@ static const RegJNIRec gRegJNI[] = {
|
|||||||
REG_JNI(register_android_ddm_DdmHandleNativeHeap),
|
REG_JNI(register_android_ddm_DdmHandleNativeHeap),
|
||||||
REG_JNI(register_android_util_Base64),
|
REG_JNI(register_android_util_Base64),
|
||||||
REG_JNI(register_android_location_GpsLocationProvider),
|
REG_JNI(register_android_location_GpsLocationProvider),
|
||||||
|
REG_JNI(register_android_backup_FileBackupHelper),
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
79
core/jni/android_backup_FileBackupHelper.cpp
Normal file
79
core/jni/android_backup_FileBackupHelper.cpp
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2009 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "JNIHelp.h"
|
||||||
|
#include <android_runtime/AndroidRuntime.h>
|
||||||
|
|
||||||
|
#include <utils/backup_helpers.h>
|
||||||
|
|
||||||
|
namespace android
|
||||||
|
{
|
||||||
|
|
||||||
|
static jfieldID s_descriptorField;
|
||||||
|
|
||||||
|
static int
|
||||||
|
performBackup_native(JNIEnv* env, jstring basePath,
|
||||||
|
jobject oldSnapshot, jobject newSnapshot,
|
||||||
|
jobject data, jobjectArray files)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
|
// all parameters have already been checked against null
|
||||||
|
|
||||||
|
int oldSnapshotFD = env->GetIntField(oldSnapshot, s_descriptorField);
|
||||||
|
int newSnapshotFD = env->GetIntField(newSnapshot, s_descriptorField);
|
||||||
|
int dataFD = env->GetIntField(data, s_descriptorField);
|
||||||
|
|
||||||
|
char const* basePathUTF = env->GetStringUTFChars(basePath, NULL);
|
||||||
|
const int fileCount = env->GetArrayLength(files);
|
||||||
|
char const** filesUTF = (char const**)malloc(sizeof(char*)*fileCount);
|
||||||
|
for (int i=0; i<fileCount; i++) {
|
||||||
|
filesUTF[i] = env->GetStringUTFChars((jstring)env->GetObjectArrayElement(files, i), NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
err = back_up_files(oldSnapshotFD, newSnapshotFD, dataFD, basePathUTF, filesUTF, fileCount);
|
||||||
|
|
||||||
|
for (int i=0; i<fileCount; i++) {
|
||||||
|
env->ReleaseStringUTFChars((jstring)env->GetObjectArrayElement(files, i), filesUTF[i]);
|
||||||
|
}
|
||||||
|
free(filesUTF);
|
||||||
|
env->ReleaseStringUTFChars(basePath, basePathUTF);
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const JNINativeMethod g_methods[] = {
|
||||||
|
{ "performBackup_native",
|
||||||
|
"(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;"
|
||||||
|
"Ljava/io/FileDescriptor;[Ljava/lang/String;)I",
|
||||||
|
(void*)performBackup_native },
|
||||||
|
};
|
||||||
|
|
||||||
|
int register_android_backup_FileBackupHelper(JNIEnv* env)
|
||||||
|
{
|
||||||
|
jclass clazz;
|
||||||
|
|
||||||
|
clazz = env->FindClass("java/io/FileDescriptor");
|
||||||
|
LOG_FATAL_IF(clazz == NULL, "Unable to find class java.io.FileDescriptor");
|
||||||
|
s_descriptorField = env->GetFieldID(clazz, "descriptor", "I");
|
||||||
|
LOG_FATAL_IF(s_descriptorField == NULL,
|
||||||
|
"Unable to find descriptor field in java.io.FileDescriptor");
|
||||||
|
|
||||||
|
return AndroidRuntime::registerNativeMethods(env, "android/backup/FileBackupHelper",
|
||||||
|
g_methods, NELEM(g_methods));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,19 +1,18 @@
|
|||||||
/* //device/libs/android_runtime/android_os_ParcelFileDescriptor.cpp
|
/*
|
||||||
**
|
* Copyright (C) 2008 The Android Open Source Project
|
||||||
** Copyright 2008, The Android Open Source Project
|
*
|
||||||
**
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
||||||
** you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
||||||
** You may obtain a copy of the License at
|
*
|
||||||
**
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
** http://www.apache.org/licenses/LICENSE-2.0
|
*
|
||||||
**
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
** Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
||||||
** See the License for the specific language governing permissions and
|
* limitations under the License.
|
||||||
** limitations under the License.
|
*/
|
||||||
*/
|
|
||||||
|
|
||||||
//#define LOG_NDEBUG 0
|
//#define LOG_NDEBUG 0
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,9 @@ import android.util.SparseArray;
|
|||||||
import android.backup.IBackupManager;
|
import android.backup.IBackupManager;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileDescriptor;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
import java.lang.String;
|
import java.lang.String;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -51,7 +53,8 @@ class BackupManagerService extends IBackupManager.Stub {
|
|||||||
private static final String TAG = "BackupManagerService";
|
private static final String TAG = "BackupManagerService";
|
||||||
private static final boolean DEBUG = true;
|
private static final boolean DEBUG = true;
|
||||||
|
|
||||||
private static final long COLLECTION_INTERVAL = 3 * 60 * 1000;
|
private static final long COLLECTION_INTERVAL = 1000;
|
||||||
|
//private static final long COLLECTION_INTERVAL = 3 * 60 * 1000;
|
||||||
|
|
||||||
private static final int MSG_RUN_BACKUP = 1;
|
private static final int MSG_RUN_BACKUP = 1;
|
||||||
|
|
||||||
@@ -339,7 +342,10 @@ class BackupManagerService extends IBackupManager.Stub {
|
|||||||
// may share a uid, we need to note all candidates within that uid and schedule
|
// may share a uid, we need to note all candidates within that uid and schedule
|
||||||
// a backup pass for each of them.
|
// a backup pass for each of them.
|
||||||
|
|
||||||
|
Log.d(TAG, "dataChanged packageName=" + packageName);
|
||||||
|
|
||||||
HashSet<ServiceInfo> targets = mBackupParticipants.get(Binder.getCallingUid());
|
HashSet<ServiceInfo> targets = mBackupParticipants.get(Binder.getCallingUid());
|
||||||
|
Log.d(TAG, "targets=" + targets);
|
||||||
if (targets != null) {
|
if (targets != null) {
|
||||||
synchronized (mQueueLock) {
|
synchronized (mQueueLock) {
|
||||||
// Note that this client has made data changes that need to be backed up
|
// Note that this client has made data changes that need to be backed up
|
||||||
@@ -354,6 +360,7 @@ class BackupManagerService extends IBackupManager.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log.d(TAG, "Scheduling backup for " + mPendingBackups.size() + " participants");
|
||||||
// Schedule a backup pass in a few minutes. As backup-eligible data
|
// Schedule a backup pass in a few minutes. As backup-eligible data
|
||||||
// keeps changing, continue to defer the backup pass until things
|
// keeps changing, continue to defer the backup pass until things
|
||||||
// settle down, to avoid extra overhead.
|
// settle down, to avoid extra overhead.
|
||||||
@@ -380,4 +387,23 @@ class BackupManagerService extends IBackupManager.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||||
|
synchronized (mQueueLock) {
|
||||||
|
int N = mBackupParticipants.size();
|
||||||
|
pw.println("Participants:");
|
||||||
|
for (int i=0; i<N; i++) {
|
||||||
|
int uid = mBackupParticipants.keyAt(i);
|
||||||
|
pw.print(" uid: ");
|
||||||
|
pw.println(uid);
|
||||||
|
HashSet<ServiceInfo> services = mBackupParticipants.valueAt(i);
|
||||||
|
for (ServiceInfo s: services) {
|
||||||
|
pw.print(" ");
|
||||||
|
pw.println(s.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ include $(CLEAR_VARS)
|
|||||||
LOCAL_SRC_FILES := \
|
LOCAL_SRC_FILES := \
|
||||||
backup_helper_test.cpp
|
backup_helper_test.cpp
|
||||||
|
|
||||||
LOCAL_MODULE_TAGS := optional
|
LOCAL_MODULE_TAGS := user
|
||||||
LOCAL_MODULE := backup_helper_test
|
LOCAL_MODULE := backup_helper_test
|
||||||
LOCAL_SHARED_LIBRARIES := libutils
|
LOCAL_SHARED_LIBRARIES := libutils
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ include $(BUILD_EXECUTABLE)
|
|||||||
# ========================================
|
# ========================================
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
LOCAL_MODULE_TAGS := tests
|
LOCAL_MODULE_TAGS := user
|
||||||
|
|
||||||
LOCAL_SRC_FILES := $(call all-subdir-java-files)
|
LOCAL_SRC_FILES := $(call all-subdir-java-files)
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
</activity>
|
</activity>
|
||||||
<service android:name="BackupTestService">
|
<service android:name="BackupTestService">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.backup.BackupService" />
|
<action android:name="android.backup.BackupService.SERVICE" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</service>
|
</service>
|
||||||
</application>
|
</application>
|
||||||
|
|||||||
@@ -31,14 +31,58 @@ import android.widget.ArrayAdapter;
|
|||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintStream;
|
||||||
|
import java.text.DateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
public class BackupTestActivity extends ListActivity
|
public class BackupTestActivity extends ListActivity
|
||||||
{
|
{
|
||||||
static final String TAG = "BackupTestActivity";
|
static final String TAG = "BackupTestActivity";
|
||||||
|
|
||||||
static final String PREF_GROUP_SETTINGS = "settings";
|
static final String PREF_GROUP_SETTINGS = "settings";
|
||||||
static final String PREF_KEY = "pref";
|
static final String PREF_KEY = "pref";
|
||||||
|
static final String FILE_NAME = "file.txt";
|
||||||
|
|
||||||
Test[] mTests = new Test[] {
|
Test[] mTests = new Test[] {
|
||||||
|
new Test("Show File") {
|
||||||
|
void run() {
|
||||||
|
StringBuffer str = new StringBuffer();
|
||||||
|
str.append("Text is:");
|
||||||
|
BufferedReader reader = null;
|
||||||
|
try {
|
||||||
|
reader = new BufferedReader(new InputStreamReader(openFileInput(FILE_NAME)));
|
||||||
|
while (reader.ready()) {
|
||||||
|
str.append("\n");
|
||||||
|
str.append(reader.readLine());
|
||||||
|
}
|
||||||
|
} catch (IOException ex) {
|
||||||
|
str.append("ERROR: ");
|
||||||
|
str.append(ex.toString());
|
||||||
|
}
|
||||||
|
Log.d(TAG, str.toString());
|
||||||
|
Toast.makeText(BackupTestActivity.this, str, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new Test("Append to File") {
|
||||||
|
void run() {
|
||||||
|
PrintStream output = null;
|
||||||
|
try {
|
||||||
|
output = new PrintStream(openFileOutput(FILE_NAME, MODE_APPEND));
|
||||||
|
DateFormat formatter = DateFormat.getDateTimeInstance();
|
||||||
|
output.println(formatter.format(new Date()));
|
||||||
|
output.close();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
if (output != null) {
|
||||||
|
output.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BackupManager bm = new BackupManager(BackupTestActivity.this);
|
||||||
|
bm.dataChanged();
|
||||||
|
}
|
||||||
|
},
|
||||||
new Test("Show Shared Pref") {
|
new Test("Show Shared Pref") {
|
||||||
void run() {
|
void run() {
|
||||||
SharedPreferences prefs = getSharedPreferences(PREF_GROUP_SETTINGS, MODE_PRIVATE);
|
SharedPreferences prefs = getSharedPreferences(PREF_GROUP_SETTINGS, MODE_PRIVATE);
|
||||||
|
|||||||
Reference in New Issue
Block a user