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