1package com.android.server.backup;
2
3
4import android.app.backup.BlobBackupHelper;
5import android.app.usage.UsageStatsManagerInternal;
6import android.content.Context;
7import android.os.UserHandle;
8import android.util.Log;
9
10import com.android.server.LocalServices;
11
12import java.io.ByteArrayInputStream;
13import java.io.ByteArrayOutputStream;
14import java.io.DataInputStream;
15import java.io.DataOutputStream;
16import java.io.IOException;
17
18public class UsageStatsBackupHelper extends BlobBackupHelper {
19    static final String TAG = "UsgStatsBackupHelper";   // must be < 23 chars
20    static final boolean DEBUG = false;
21
22    // Current version of the blob schema
23    static final int BLOB_VERSION = 1;
24
25    // Key under which the payload blob is stored
26    // same as UsageStatsDatabase.KEY_USAGE_STATS
27    static final String KEY_USAGE_STATS = "usage_stats";
28
29    public UsageStatsBackupHelper(Context context) {
30        super(BLOB_VERSION, KEY_USAGE_STATS);
31    }
32
33    @Override
34    protected byte[] getBackupPayload(String key) {
35        if (KEY_USAGE_STATS.equals(key)) {
36            UsageStatsManagerInternal localUsageStatsManager =
37                    LocalServices.getService(UsageStatsManagerInternal.class);
38            ByteArrayOutputStream baos = new ByteArrayOutputStream();
39            DataOutputStream out  = new DataOutputStream(baos);
40            try {
41                out.writeInt(UserHandle.USER_SYSTEM);
42                out.write(localUsageStatsManager.getBackupPayload(UserHandle.USER_SYSTEM, key));
43            } catch (IOException ioe) {
44                if (DEBUG) Log.e(TAG, "Failed to backup Usage Stats", ioe);
45                baos.reset();
46            }
47            return baos.toByteArray();
48        }
49        return null;
50    }
51
52
53    @Override
54    protected void applyRestoredPayload(String key, byte[] payload)  {
55        if (KEY_USAGE_STATS.equals(key)) {
56            UsageStatsManagerInternal localUsageStatsManager =
57                    LocalServices.getService(UsageStatsManagerInternal.class);
58            DataInputStream in = new DataInputStream(new ByteArrayInputStream(payload));
59            try {
60                int user = in.readInt();
61                byte[] restoreData = new byte[payload.length - 4];
62                in.read(restoreData, 0, restoreData.length);
63                localUsageStatsManager.applyRestoredPayload(user, key, restoreData);
64            } catch (IOException ioe) {
65                if (DEBUG) Log.e(TAG, "Failed to restore Usage Stats", ioe);
66            }
67        }
68    }
69}
70