1 package com.android.server.backup; 2 3 4 import android.app.backup.BlobBackupHelper; 5 import android.app.usage.UsageStatsManagerInternal; 6 import android.content.Context; 7 import android.os.UserHandle; 8 import android.util.Log; 9 10 import com.android.server.LocalServices; 11 12 import java.io.ByteArrayInputStream; 13 import java.io.ByteArrayOutputStream; 14 import java.io.DataInputStream; 15 import java.io.DataOutputStream; 16 import java.io.IOException; 17 18 public 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