/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.backuptest; import android.app.ListActivity; import android.app.backup.BackupHelperDispatcher; import android.app.backup.BackupDataInput; import android.app.backup.BackupDataOutput; import android.app.backup.BackupManager; import android.app.backup.FileBackupHelper; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import android.os.ParcelFileDescriptor; import android.util.Log; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStreamReader; import java.io.IOException; import java.io.PrintStream; import java.text.DateFormat; import java.util.Date; public class BackupTestActivity extends ListActivity { static final String TAG = "BackupTestActivity"; static final String PREF_GROUP_SETTINGS = "settings"; static final String PREF_KEY = "pref"; static final String FILE_NAME = "file.txt"; BackupManager sBm = new BackupManager(this); Test[] mTests = new Test[] { new Test("Show File") { void run() { StringBuffer str = new StringBuffer(); str.append("Text is:"); BufferedReader reader = null; try { reader = new BufferedReader(new InputStreamReader(openFileInput(FILE_NAME))); while (reader.ready()) { str.append("\n"); str.append(reader.readLine()); } } catch (IOException ex) { str.append("ERROR: "); str.append(ex.toString()); } Log.d(TAG, str.toString()); Toast.makeText(BackupTestActivity.this, str, Toast.LENGTH_SHORT).show(); } }, new Test("Append to File") { void run() { PrintStream output = null; try { output = new PrintStream(openFileOutput(FILE_NAME, MODE_APPEND)); DateFormat formatter = DateFormat.getDateTimeInstance(); output.println(formatter.format(new Date())); output.close(); } catch (IOException ex) { if (output != null) { output.close(); } } sBm.dataChanged(); } }, new Test("Clear File") { void run() { PrintStream output = null; try { output = new PrintStream(openFileOutput(FILE_NAME, MODE_PRIVATE)); output.close(); } catch (IOException ex) { if (output != null) { output.close(); } } sBm.dataChanged(); } }, new Test("Poke") { void run() { sBm.dataChanged(); } }, new Test("Show Shared Pref") { void run() { SharedPreferences prefs = getSharedPreferences(PREF_GROUP_SETTINGS, MODE_PRIVATE); int val = prefs.getInt(PREF_KEY, 0); String str = "'" + PREF_KEY + "' is " + val; Log.d(TAG, str); Toast.makeText(BackupTestActivity.this, str, Toast.LENGTH_SHORT).show(); } }, new Test("Increment Shared Pref") { void run() { SharedPreferences prefs = getSharedPreferences(PREF_GROUP_SETTINGS, MODE_PRIVATE); int val = prefs.getInt(PREF_KEY, 0); SharedPreferences.Editor editor = prefs.edit(); editor.putInt(PREF_KEY, val+1); editor.commit(); sBm.dataChanged(); } }, new Test("Backup Helpers") { void run() { try { writeFile("a", "a\naa", MODE_PRIVATE); writeFile("empty", "", MODE_PRIVATE); ParcelFileDescriptor state = ParcelFileDescriptor.open( new File(getFilesDir(), "state"), ParcelFileDescriptor.MODE_READ_WRITE|ParcelFileDescriptor.MODE_CREATE| ParcelFileDescriptor.MODE_TRUNCATE); FileBackupHelper h = new FileBackupHelper(BackupTestActivity.this, new String[] { "a", "empty" }); FileOutputStream dataFile = openFileOutput("backup_test", MODE_WORLD_READABLE); BackupDataOutput data = new BackupDataOutput(dataFile.getFD()); h.performBackup(null, data, state); dataFile.close(); state.close(); } catch (IOException ex) { throw new RuntimeException(ex); } } }, new Test("Restore Helpers") { void run() { try { BackupHelperDispatcher dispatch = new BackupHelperDispatcher(); dispatch.addHelper("", new FileBackupHelper(BackupTestActivity.this, new String[] { "a", "empty" })); FileInputStream dataFile = openFileInput("backup_test"); BackupDataInput data = new BackupDataInput(dataFile.getFD()); ParcelFileDescriptor state = ParcelFileDescriptor.open( new File(getFilesDir(), "restore_state"), ParcelFileDescriptor.MODE_READ_WRITE|ParcelFileDescriptor.MODE_CREATE| ParcelFileDescriptor.MODE_TRUNCATE); // TODO: a more plausable synthetic stored-data version number dispatch.performRestore(data, 0, state); dataFile.close(); state.close(); } catch (IOException ex) { throw new RuntimeException(ex); } } } }; abstract class Test { String name; Test(String n) { name = n; } abstract void run(); } @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); String[] labels = new String[mTests.length]; for (int i=0; i(this, android.R.layout.simple_list_item_1, labels)); } @Override public void onListItemClick(ListView l, View v, int position, long id) { Test t = mTests[position]; Log.d(TAG, "Test: " + t.name); t.run(); } void writeFile(String name, String contents, int mode) { try { PrintStream out = new PrintStream(openFileOutput(name, mode)); out.print(contents); out.close(); } catch (FileNotFoundException ex) { throw new RuntimeException(ex); } } }