Home | History | Annotate | Download | only in backup
      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