1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.backuptest; 18 19 import android.app.ListActivity; 20 import android.app.backup.BackupHelperDispatcher; 21 import android.app.backup.BackupDataInput; 22 import android.app.backup.BackupDataOutput; 23 import android.app.backup.BackupManager; 24 import android.app.backup.FileBackupHelper; 25 import android.content.Intent; 26 import android.content.SharedPreferences; 27 import android.os.Bundle; 28 import android.os.Handler; 29 import android.os.ParcelFileDescriptor; 30 import android.util.Log; 31 import android.view.View; 32 import android.widget.ArrayAdapter; 33 import android.widget.ListView; 34 import android.widget.Toast; 35 36 import java.io.BufferedReader; 37 import java.io.File; 38 import java.io.FileOutputStream; 39 import java.io.FileInputStream; 40 import java.io.FileNotFoundException; 41 import java.io.InputStreamReader; 42 import java.io.IOException; 43 import java.io.PrintStream; 44 import java.text.DateFormat; 45 import java.util.Date; 46 47 public class BackupTestActivity extends ListActivity 48 { 49 static final String TAG = "BackupTestActivity"; 50 51 static final String PREF_GROUP_SETTINGS = "settings"; 52 static final String PREF_KEY = "pref"; 53 static final String FILE_NAME = "file.txt"; 54 55 BackupManager sBm = new BackupManager(this); 56 57 Test[] mTests = new Test[] { 58 new Test("Show File") { 59 void run() { 60 StringBuffer str = new StringBuffer(); 61 str.append("Text is:"); 62 BufferedReader reader = null; 63 try { 64 reader = new BufferedReader(new InputStreamReader(openFileInput(FILE_NAME))); 65 while (reader.ready()) { 66 str.append("\n"); 67 str.append(reader.readLine()); 68 } 69 } catch (IOException ex) { 70 str.append("ERROR: "); 71 str.append(ex.toString()); 72 } 73 Log.d(TAG, str.toString()); 74 Toast.makeText(BackupTestActivity.this, str, Toast.LENGTH_SHORT).show(); 75 } 76 }, 77 new Test("Append to File") { 78 void run() { 79 PrintStream output = null; 80 try { 81 output = new PrintStream(openFileOutput(FILE_NAME, MODE_APPEND)); 82 DateFormat formatter = DateFormat.getDateTimeInstance(); 83 output.println(formatter.format(new Date())); 84 output.close(); 85 } catch (IOException ex) { 86 if (output != null) { 87 output.close(); 88 } 89 } 90 sBm.dataChanged(); 91 } 92 }, 93 new Test("Clear File") { 94 void run() { 95 PrintStream output = null; 96 try { 97 output = new PrintStream(openFileOutput(FILE_NAME, MODE_PRIVATE)); 98 output.close(); 99 } catch (IOException ex) { 100 if (output != null) { 101 output.close(); 102 } 103 } 104 sBm.dataChanged(); 105 } 106 }, 107 new Test("Poke") { 108 void run() { 109 sBm.dataChanged(); 110 } 111 }, 112 new Test("Show Shared Pref") { 113 void run() { 114 SharedPreferences prefs = getSharedPreferences(PREF_GROUP_SETTINGS, MODE_PRIVATE); 115 int val = prefs.getInt(PREF_KEY, 0); 116 String str = "'" + PREF_KEY + "' is " + val; 117 Log.d(TAG, str); 118 Toast.makeText(BackupTestActivity.this, str, Toast.LENGTH_SHORT).show(); 119 } 120 }, 121 new Test("Increment Shared Pref") { 122 void run() { 123 SharedPreferences prefs = getSharedPreferences(PREF_GROUP_SETTINGS, MODE_PRIVATE); 124 int val = prefs.getInt(PREF_KEY, 0); 125 SharedPreferences.Editor editor = prefs.edit(); 126 editor.putInt(PREF_KEY, val+1); 127 editor.commit(); 128 sBm.dataChanged(); 129 } 130 }, 131 new Test("Backup Helpers") { 132 void run() { 133 try { 134 writeFile("a", "a\naa", MODE_PRIVATE); 135 writeFile("empty", "", MODE_PRIVATE); 136 137 ParcelFileDescriptor state = ParcelFileDescriptor.open( 138 new File(getFilesDir(), "state"), 139 ParcelFileDescriptor.MODE_READ_WRITE|ParcelFileDescriptor.MODE_CREATE| 140 ParcelFileDescriptor.MODE_TRUNCATE); 141 FileBackupHelper h = new FileBackupHelper(BackupTestActivity.this, 142 new String[] { "a", "empty" }); 143 FileOutputStream dataFile = openFileOutput("backup_test", MODE_WORLD_READABLE); 144 BackupDataOutput data = new BackupDataOutput(dataFile.getFD()); 145 h.performBackup(null, data, state); 146 dataFile.close(); 147 state.close(); 148 } catch (IOException ex) { 149 throw new RuntimeException(ex); 150 } 151 } 152 }, 153 new Test("Restore Helpers") { 154 void run() { 155 try { 156 BackupHelperDispatcher dispatch = new BackupHelperDispatcher(); 157 dispatch.addHelper("", new FileBackupHelper(BackupTestActivity.this, 158 new String[] { "a", "empty" })); 159 FileInputStream dataFile = openFileInput("backup_test"); 160 BackupDataInput data = new BackupDataInput(dataFile.getFD()); 161 ParcelFileDescriptor state = ParcelFileDescriptor.open( 162 new File(getFilesDir(), "restore_state"), 163 ParcelFileDescriptor.MODE_READ_WRITE|ParcelFileDescriptor.MODE_CREATE| 164 ParcelFileDescriptor.MODE_TRUNCATE); 165 // TODO: a more plausable synthetic stored-data version number 166 dispatch.performRestore(data, 0, state); 167 dataFile.close(); 168 state.close(); 169 } catch (IOException ex) { 170 throw new RuntimeException(ex); 171 } 172 } 173 } 174 }; 175 176 abstract class Test { 177 String name; Test(String n)178 Test(String n) { 179 name = n; 180 } run()181 abstract void run(); 182 } 183 184 @Override onCreate(Bundle icicle)185 public void onCreate(Bundle icicle) { 186 super.onCreate(icicle); 187 188 String[] labels = new String[mTests.length]; 189 for (int i=0; i<mTests.length; i++) { 190 labels[i] = mTests[i].name; 191 } 192 193 setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, labels)); 194 } 195 196 @Override onListItemClick(ListView l, View v, int position, long id)197 public void onListItemClick(ListView l, View v, int position, long id) 198 { 199 Test t = mTests[position]; 200 Log.d(TAG, "Test: " + t.name); 201 t.run(); 202 } 203 writeFile(String name, String contents, int mode)204 void writeFile(String name, String contents, int mode) { 205 try { 206 PrintStream out = new PrintStream(openFileOutput(name, mode)); 207 out.print(contents); 208 out.close(); 209 } catch (FileNotFoundException ex) { 210 throw new RuntimeException(ex); 211 } 212 } 213 } 214 215