126bf003df92b05fafd4e015680a22611724aa25bDoris Ling/* 226bf003df92b05fafd4e015680a22611724aa25bDoris Ling * Copyright (C) 2016 The Android Open Source Project 326bf003df92b05fafd4e015680a22611724aa25bDoris Ling * 426bf003df92b05fafd4e015680a22611724aa25bDoris Ling * Licensed under the Apache License, Version 2.0 (the "License"); 526bf003df92b05fafd4e015680a22611724aa25bDoris Ling * you may not use this file except in compliance with the License. 626bf003df92b05fafd4e015680a22611724aa25bDoris Ling * You may obtain a copy of the License at 726bf003df92b05fafd4e015680a22611724aa25bDoris Ling * 826bf003df92b05fafd4e015680a22611724aa25bDoris Ling * http://www.apache.org/licenses/LICENSE-2.0 926bf003df92b05fafd4e015680a22611724aa25bDoris Ling * 1026bf003df92b05fafd4e015680a22611724aa25bDoris Ling * Unless required by applicable law or agreed to in writing, software 1126bf003df92b05fafd4e015680a22611724aa25bDoris Ling * distributed under the License is distributed on an "AS IS" BASIS, 1226bf003df92b05fafd4e015680a22611724aa25bDoris Ling * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1326bf003df92b05fafd4e015680a22611724aa25bDoris Ling * See the License for the specific language governing permissions and 1426bf003df92b05fafd4e015680a22611724aa25bDoris Ling * limitations under the License. 1526bf003df92b05fafd4e015680a22611724aa25bDoris Ling */ 1626bf003df92b05fafd4e015680a22611724aa25bDoris Ling 1726bf003df92b05fafd4e015680a22611724aa25bDoris Lingpackage com.android.settings; 1826bf003df92b05fafd4e015680a22611724aa25bDoris Ling 1926bf003df92b05fafd4e015680a22611724aa25bDoris Lingimport android.app.Activity; 20ee564e9cfc58aa2ed59b29e2a8eda941e4fb4818Christopher Tateimport android.app.backup.BackupManager; 21ee564e9cfc58aa2ed59b29e2a8eda941e4fb4818Christopher Tateimport android.app.backup.IBackupManager; 22ee564e9cfc58aa2ed59b29e2a8eda941e4fb4818Christopher Tateimport android.content.Context; 2326bf003df92b05fafd4e015680a22611724aa25bDoris Lingimport android.content.Intent; 2426bf003df92b05fafd4e015680a22611724aa25bDoris Lingimport android.os.Bundle; 25ee564e9cfc58aa2ed59b29e2a8eda941e4fb4818Christopher Tateimport android.os.ServiceManager; 26ee564e9cfc58aa2ed59b29e2a8eda941e4fb4818Christopher Tateimport android.os.UserHandle; 2726bf003df92b05fafd4e015680a22611724aa25bDoris Lingimport android.text.TextUtils; 2826bf003df92b05fafd4e015680a22611724aa25bDoris Lingimport android.util.Log; 2926bf003df92b05fafd4e015680a22611724aa25bDoris Ling 3026bf003df92b05fafd4e015680a22611724aa25bDoris Lingimport com.android.settings.R; 3126bf003df92b05fafd4e015680a22611724aa25bDoris Ling 3226bf003df92b05fafd4e015680a22611724aa25bDoris Lingimport java.net.URISyntaxException; 3326bf003df92b05fafd4e015680a22611724aa25bDoris Ling 3426bf003df92b05fafd4e015680a22611724aa25bDoris Ling/** 3526bf003df92b05fafd4e015680a22611724aa25bDoris Ling * A trampoline activity used to launch the configured Backup activity. 3626bf003df92b05fafd4e015680a22611724aa25bDoris Ling * This activity used the theme NoDisplay to minimize the flicker that might be seen for the launch- 3726bf003df92b05fafd4e015680a22611724aa25bDoris Ling * finsih transition. 3826bf003df92b05fafd4e015680a22611724aa25bDoris Ling */ 3926bf003df92b05fafd4e015680a22611724aa25bDoris Lingpublic class BackupSettingsActivity extends Activity { 4026bf003df92b05fafd4e015680a22611724aa25bDoris Ling private static final String TAG = "BackupSettingsActivity"; 4126bf003df92b05fafd4e015680a22611724aa25bDoris Ling 4226bf003df92b05fafd4e015680a22611724aa25bDoris Ling @Override 4326bf003df92b05fafd4e015680a22611724aa25bDoris Ling public void onCreate(Bundle savedInstanceState) { 4426bf003df92b05fafd4e015680a22611724aa25bDoris Ling super.onCreate(savedInstanceState); 4526bf003df92b05fafd4e015680a22611724aa25bDoris Ling String backup = getResources().getString(R.string.config_backup_settings_intent); 4626bf003df92b05fafd4e015680a22611724aa25bDoris Ling if (!TextUtils.isEmpty(backup)) { 4726bf003df92b05fafd4e015680a22611724aa25bDoris Ling try { 4826bf003df92b05fafd4e015680a22611724aa25bDoris Ling Intent intent = Intent.parseUri(backup, 0); 4926bf003df92b05fafd4e015680a22611724aa25bDoris Ling if (intent.resolveActivity(getPackageManager()) != null) { 5026bf003df92b05fafd4e015680a22611724aa25bDoris Ling // use startActivityForResult to let the activity check the caller signature 51ee564e9cfc58aa2ed59b29e2a8eda941e4fb4818Christopher Tate IBackupManager bmgr = IBackupManager.Stub.asInterface( 52ee564e9cfc58aa2ed59b29e2a8eda941e4fb4818Christopher Tate ServiceManager.getService(Context.BACKUP_SERVICE)); 53ee564e9cfc58aa2ed59b29e2a8eda941e4fb4818Christopher Tate boolean backupOkay; 54ee564e9cfc58aa2ed59b29e2a8eda941e4fb4818Christopher Tate try { 55ee564e9cfc58aa2ed59b29e2a8eda941e4fb4818Christopher Tate backupOkay = bmgr.isBackupServiceActive(UserHandle.myUserId()); 56ee564e9cfc58aa2ed59b29e2a8eda941e4fb4818Christopher Tate } catch (Exception e) { 57ee564e9cfc58aa2ed59b29e2a8eda941e4fb4818Christopher Tate // things go wrong talking to the backup system => ignore and 58ee564e9cfc58aa2ed59b29e2a8eda941e4fb4818Christopher Tate // pass the default 'false' as the "backup is a thing?" state. 59ee564e9cfc58aa2ed59b29e2a8eda941e4fb4818Christopher Tate backupOkay = false; 60ee564e9cfc58aa2ed59b29e2a8eda941e4fb4818Christopher Tate } 61ee564e9cfc58aa2ed59b29e2a8eda941e4fb4818Christopher Tate intent.putExtra(BackupManager.EXTRA_BACKUP_SERVICES_AVAILABLE, backupOkay); 6226bf003df92b05fafd4e015680a22611724aa25bDoris Ling startActivityForResult(intent, -1); 6326bf003df92b05fafd4e015680a22611724aa25bDoris Ling } else { 6426bf003df92b05fafd4e015680a22611724aa25bDoris Ling Log.e(TAG, "Backup component not found!"); 6526bf003df92b05fafd4e015680a22611724aa25bDoris Ling } 6626bf003df92b05fafd4e015680a22611724aa25bDoris Ling } catch (URISyntaxException e) { 6726bf003df92b05fafd4e015680a22611724aa25bDoris Ling Log.e(TAG, "Invalid backup component URI!", e); 6826bf003df92b05fafd4e015680a22611724aa25bDoris Ling } 6926bf003df92b05fafd4e015680a22611724aa25bDoris Ling } 7026bf003df92b05fafd4e015680a22611724aa25bDoris Ling finish(); 7126bf003df92b05fafd4e015680a22611724aa25bDoris Ling } 7226bf003df92b05fafd4e015680a22611724aa25bDoris Ling}