blob: d6a70d369cdc6f94c1dd1f210bcdd49b372b5b5d [file] [log] [blame]
Ritesh Reddy8a6ce2c2015-12-17 17:03:54 +00001package com.android.server.backup;
2
3
4import android.app.backup.BlobBackupHelper;
Ritesh Reddy8a6ce2c2015-12-17 17:03:54 +00005import android.app.usage.UsageStatsManagerInternal;
6import android.content.Context;
Ritesh Reddy8a6ce2c2015-12-17 17:03:54 +00007import 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
Ritesh Reddye35ae5c2016-02-03 17:06:57 +000026 // same as UsageStatsDatabase.KEY_USAGE_STATS
Ritesh Reddy8a6ce2c2015-12-17 17:03:54 +000027 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) {
Ritesh Reddye35ae5c2016-02-03 17:06:57 +000035 if (KEY_USAGE_STATS.equals(key)) {
36 UsageStatsManagerInternal localUsageStatsManager =
37 LocalServices.getService(UsageStatsManagerInternal.class);
Ritesh Reddy8a6ce2c2015-12-17 17:03:54 +000038 ByteArrayOutputStream baos = new ByteArrayOutputStream();
39 DataOutputStream out = new DataOutputStream(baos);
Ritesh Reddye35ae5c2016-02-03 17:06:57 +000040 try {
Ritesh Reddy8a6ce2c2015-12-17 17:03:54 +000041 out.writeInt(UserHandle.USER_SYSTEM);
42 out.write(localUsageStatsManager.getBackupPayload(UserHandle.USER_SYSTEM, key));
Ritesh Reddye35ae5c2016-02-03 17:06:57 +000043 } catch (IOException ioe) {
Ritesh Reddy8a6ce2c2015-12-17 17:03:54 +000044 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)) {
Ritesh Reddye35ae5c2016-02-03 17:06:57 +000056 UsageStatsManagerInternal localUsageStatsManager =
57 LocalServices.getService(UsageStatsManagerInternal.class);
Ritesh Reddy8a6ce2c2015-12-17 17:03:54 +000058 DataInputStream in = new DataInputStream(new ByteArrayInputStream(payload));
Ritesh Reddye35ae5c2016-02-03 17:06:57 +000059 try {
Ritesh Reddy8a6ce2c2015-12-17 17:03:54 +000060 int user = in.readInt();
61 byte[] restoreData = new byte[payload.length - 4];
Ritesh Reddye35ae5c2016-02-03 17:06:57 +000062 in.read(restoreData, 0, restoreData.length);
Ritesh Reddy8a6ce2c2015-12-17 17:03:54 +000063 localUsageStatsManager.applyRestoredPayload(user, key, restoreData);
Ritesh Reddye35ae5c2016-02-03 17:06:57 +000064 } catch (IOException ioe) {
Ritesh Reddy8a6ce2c2015-12-17 17:03:54 +000065 if (DEBUG) Log.e(TAG, "Failed to restore Usage Stats", ioe);
66 }
67 }
68 }
69}