1b19e62add0a747127952862bb7bea0b73379edccFred Quintana/*
2b19e62add0a747127952862bb7bea0b73379edccFred Quintana * Copyright (C) 2007 The Android Open Source Project
3b19e62add0a747127952862bb7bea0b73379edccFred Quintana *
4b19e62add0a747127952862bb7bea0b73379edccFred Quintana * Licensed under the Apache License, Version 2.0 (the "License");
5b19e62add0a747127952862bb7bea0b73379edccFred Quintana * you may not use this file except in compliance with the License.
6b19e62add0a747127952862bb7bea0b73379edccFred Quintana * You may obtain a copy of the License at
7b19e62add0a747127952862bb7bea0b73379edccFred Quintana *
8b19e62add0a747127952862bb7bea0b73379edccFred Quintana *      http://www.apache.org/licenses/LICENSE-2.0
9b19e62add0a747127952862bb7bea0b73379edccFred Quintana *
10b19e62add0a747127952862bb7bea0b73379edccFred Quintana * Unless required by applicable law or agreed to in writing, software
11b19e62add0a747127952862bb7bea0b73379edccFred Quintana * distributed under the License is distributed on an "AS IS" BASIS,
12b19e62add0a747127952862bb7bea0b73379edccFred Quintana * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b19e62add0a747127952862bb7bea0b73379edccFred Quintana * See the License for the specific language governing permissions and
14b19e62add0a747127952862bb7bea0b73379edccFred Quintana * limitations under the License.
15b19e62add0a747127952862bb7bea0b73379edccFred Quintana */
16b19e62add0a747127952862bb7bea0b73379edccFred Quintana
17b19e62add0a747127952862bb7bea0b73379edccFred Quintanapackage android.content;
18b19e62add0a747127952862bb7bea0b73379edccFred Quintana
19b19e62add0a747127952862bb7bea0b73379edccFred Quintanaimport com.android.internal.R;
20b19e62add0a747127952862bb7bea0b73379edccFred Quintanaimport android.accounts.Account;
21b19e62add0a747127952862bb7bea0b73379edccFred Quintanaimport android.app.Activity;
22b19e62add0a747127952862bb7bea0b73379edccFred Quintanaimport android.os.Bundle;
23b19e62add0a747127952862bb7bea0b73379edccFred Quintanaimport android.view.View;
24b19e62add0a747127952862bb7bea0b73379edccFred Quintanaimport android.view.ViewGroup;
25b19e62add0a747127952862bb7bea0b73379edccFred Quintanaimport android.widget.AdapterView;
26b19e62add0a747127952862bb7bea0b73379edccFred Quintanaimport android.widget.ArrayAdapter;
27b19e62add0a747127952862bb7bea0b73379edccFred Quintanaimport android.widget.LinearLayout;
28b19e62add0a747127952862bb7bea0b73379edccFred Quintanaimport android.widget.ListAdapter;
29b19e62add0a747127952862bb7bea0b73379edccFred Quintanaimport android.widget.ListView;
30b19e62add0a747127952862bb7bea0b73379edccFred Quintanaimport android.widget.TextView;
31b19e62add0a747127952862bb7bea0b73379edccFred Quintana
32b19e62add0a747127952862bb7bea0b73379edccFred Quintana/**
33b19e62add0a747127952862bb7bea0b73379edccFred Quintana * Presents multiple options for handling the case where a sync was aborted because there
34b19e62add0a747127952862bb7bea0b73379edccFred Quintana * were too many pending deletes. One option is to force the delete, another is to rollback
35b19e62add0a747127952862bb7bea0b73379edccFred Quintana * the deletes, the third is to do nothing.
36b19e62add0a747127952862bb7bea0b73379edccFred Quintana * @hide
37b19e62add0a747127952862bb7bea0b73379edccFred Quintana */
38b19e62add0a747127952862bb7bea0b73379edccFred Quintanapublic class SyncActivityTooManyDeletes extends Activity
39b19e62add0a747127952862bb7bea0b73379edccFred Quintana        implements AdapterView.OnItemClickListener {
40b19e62add0a747127952862bb7bea0b73379edccFred Quintana
41b19e62add0a747127952862bb7bea0b73379edccFred Quintana    private long mNumDeletes;
42b19e62add0a747127952862bb7bea0b73379edccFred Quintana    private Account mAccount;
43b19e62add0a747127952862bb7bea0b73379edccFred Quintana    private String mAuthority;
44b19e62add0a747127952862bb7bea0b73379edccFred Quintana    private String mProvider;
45b19e62add0a747127952862bb7bea0b73379edccFred Quintana
46b19e62add0a747127952862bb7bea0b73379edccFred Quintana    @Override
47b19e62add0a747127952862bb7bea0b73379edccFred Quintana    protected void onCreate(Bundle savedInstanceState) {
48b19e62add0a747127952862bb7bea0b73379edccFred Quintana        super.onCreate(savedInstanceState);
49b19e62add0a747127952862bb7bea0b73379edccFred Quintana
50b19e62add0a747127952862bb7bea0b73379edccFred Quintana        Bundle extras = getIntent().getExtras();
51b19e62add0a747127952862bb7bea0b73379edccFred Quintana        if (extras == null) {
52b19e62add0a747127952862bb7bea0b73379edccFred Quintana            finish();
53b19e62add0a747127952862bb7bea0b73379edccFred Quintana            return;
54b19e62add0a747127952862bb7bea0b73379edccFred Quintana        }
55b19e62add0a747127952862bb7bea0b73379edccFred Quintana
56b19e62add0a747127952862bb7bea0b73379edccFred Quintana        mNumDeletes = extras.getLong("numDeletes");
57b19e62add0a747127952862bb7bea0b73379edccFred Quintana        mAccount = (Account) extras.getParcelable("account");
58b19e62add0a747127952862bb7bea0b73379edccFred Quintana        mAuthority = extras.getString("authority");
59b19e62add0a747127952862bb7bea0b73379edccFred Quintana        mProvider = extras.getString("provider");
60b19e62add0a747127952862bb7bea0b73379edccFred Quintana
61b19e62add0a747127952862bb7bea0b73379edccFred Quintana        // the order of these must match up with the constants for position used in onItemClick
62b19e62add0a747127952862bb7bea0b73379edccFred Quintana        CharSequence[] options = new CharSequence[]{
63b19e62add0a747127952862bb7bea0b73379edccFred Quintana                getResources().getText(R.string.sync_really_delete),
64b19e62add0a747127952862bb7bea0b73379edccFred Quintana                getResources().getText(R.string.sync_undo_deletes),
65b19e62add0a747127952862bb7bea0b73379edccFred Quintana                getResources().getText(R.string.sync_do_nothing)
66b19e62add0a747127952862bb7bea0b73379edccFred Quintana        };
67b19e62add0a747127952862bb7bea0b73379edccFred Quintana
68b19e62add0a747127952862bb7bea0b73379edccFred Quintana        ListAdapter adapter = new ArrayAdapter<CharSequence>(this,
69b19e62add0a747127952862bb7bea0b73379edccFred Quintana                android.R.layout.simple_list_item_1,
70b19e62add0a747127952862bb7bea0b73379edccFred Quintana                android.R.id.text1,
71b19e62add0a747127952862bb7bea0b73379edccFred Quintana                options);
72b19e62add0a747127952862bb7bea0b73379edccFred Quintana
73b19e62add0a747127952862bb7bea0b73379edccFred Quintana        ListView listView = new ListView(this);
74b19e62add0a747127952862bb7bea0b73379edccFred Quintana        listView.setAdapter(adapter);
75b19e62add0a747127952862bb7bea0b73379edccFred Quintana        listView.setItemsCanFocus(true);
76b19e62add0a747127952862bb7bea0b73379edccFred Quintana        listView.setOnItemClickListener(this);
77b19e62add0a747127952862bb7bea0b73379edccFred Quintana
78b19e62add0a747127952862bb7bea0b73379edccFred Quintana        TextView textView = new TextView(this);
79b19e62add0a747127952862bb7bea0b73379edccFred Quintana        CharSequence tooManyDeletesDescFormat =
80b19e62add0a747127952862bb7bea0b73379edccFred Quintana                getResources().getText(R.string.sync_too_many_deletes_desc);
81b19e62add0a747127952862bb7bea0b73379edccFred Quintana        textView.setText(String.format(tooManyDeletesDescFormat.toString(),
82b19e62add0a747127952862bb7bea0b73379edccFred Quintana                mNumDeletes, mProvider, mAccount.name));
83b19e62add0a747127952862bb7bea0b73379edccFred Quintana
84b19e62add0a747127952862bb7bea0b73379edccFred Quintana        final LinearLayout ll = new LinearLayout(this);
85b19e62add0a747127952862bb7bea0b73379edccFred Quintana        ll.setOrientation(LinearLayout.VERTICAL);
86b19e62add0a747127952862bb7bea0b73379edccFred Quintana        final LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
87b19e62add0a747127952862bb7bea0b73379edccFred Quintana                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0);
88b19e62add0a747127952862bb7bea0b73379edccFred Quintana        ll.addView(textView, lp);
89b19e62add0a747127952862bb7bea0b73379edccFred Quintana        ll.addView(listView, lp);
90b19e62add0a747127952862bb7bea0b73379edccFred Quintana
91b19e62add0a747127952862bb7bea0b73379edccFred Quintana        // TODO: consider displaying the icon of the account type
92b19e62add0a747127952862bb7bea0b73379edccFred Quintana//        AuthenticatorDescription[] descs = AccountManager.get(this).getAuthenticatorTypes();
93b19e62add0a747127952862bb7bea0b73379edccFred Quintana//        for (AuthenticatorDescription desc : descs) {
94b19e62add0a747127952862bb7bea0b73379edccFred Quintana//            if (desc.type.equals(mAccount.type)) {
95b19e62add0a747127952862bb7bea0b73379edccFred Quintana//                try {
96b19e62add0a747127952862bb7bea0b73379edccFred Quintana//                    final Context authContext = createPackageContext(desc.packageName, 0);
97b19e62add0a747127952862bb7bea0b73379edccFred Quintana//                    ImageView imageView = new ImageView(this);
98b19e62add0a747127952862bb7bea0b73379edccFred Quintana//                    imageView.setImageDrawable(authContext.getResources().getDrawable(desc.iconId));
99b19e62add0a747127952862bb7bea0b73379edccFred Quintana//                    ll.addView(imageView, lp);
100b19e62add0a747127952862bb7bea0b73379edccFred Quintana//                } catch (PackageManager.NameNotFoundException e) {
101b19e62add0a747127952862bb7bea0b73379edccFred Quintana//                }
102b19e62add0a747127952862bb7bea0b73379edccFred Quintana//                break;
103b19e62add0a747127952862bb7bea0b73379edccFred Quintana//            }
104b19e62add0a747127952862bb7bea0b73379edccFred Quintana//        }
105b19e62add0a747127952862bb7bea0b73379edccFred Quintana
106b19e62add0a747127952862bb7bea0b73379edccFred Quintana        setContentView(ll);
107b19e62add0a747127952862bb7bea0b73379edccFred Quintana    }
108b19e62add0a747127952862bb7bea0b73379edccFred Quintana
109b19e62add0a747127952862bb7bea0b73379edccFred Quintana    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
110b19e62add0a747127952862bb7bea0b73379edccFred Quintana        // the constants for position correspond to the items options array in onCreate()
111b19e62add0a747127952862bb7bea0b73379edccFred Quintana        if (position == 0) startSyncReallyDelete();
112b19e62add0a747127952862bb7bea0b73379edccFred Quintana        else if (position == 1) startSyncUndoDeletes();
113b19e62add0a747127952862bb7bea0b73379edccFred Quintana        finish();
114b19e62add0a747127952862bb7bea0b73379edccFred Quintana    }
115b19e62add0a747127952862bb7bea0b73379edccFred Quintana
116b19e62add0a747127952862bb7bea0b73379edccFred Quintana    private void startSyncReallyDelete() {
117b19e62add0a747127952862bb7bea0b73379edccFred Quintana        Bundle extras = new Bundle();
118b19e62add0a747127952862bb7bea0b73379edccFred Quintana        extras.putBoolean(ContentResolver.SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS, true);
119b19e62add0a747127952862bb7bea0b73379edccFred Quintana        extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
120b19e62add0a747127952862bb7bea0b73379edccFred Quintana        extras.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
121b19e62add0a747127952862bb7bea0b73379edccFred Quintana        extras.putBoolean(ContentResolver.SYNC_EXTRAS_UPLOAD, true);
122b19e62add0a747127952862bb7bea0b73379edccFred Quintana        ContentResolver.requestSync(mAccount, mAuthority, extras);
123b19e62add0a747127952862bb7bea0b73379edccFred Quintana    }
124b19e62add0a747127952862bb7bea0b73379edccFred Quintana
125b19e62add0a747127952862bb7bea0b73379edccFred Quintana    private void startSyncUndoDeletes() {
126b19e62add0a747127952862bb7bea0b73379edccFred Quintana        Bundle extras = new Bundle();
127b19e62add0a747127952862bb7bea0b73379edccFred Quintana        extras.putBoolean(ContentResolver.SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS, true);
128b19e62add0a747127952862bb7bea0b73379edccFred Quintana        extras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
129b19e62add0a747127952862bb7bea0b73379edccFred Quintana        extras.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
130b19e62add0a747127952862bb7bea0b73379edccFred Quintana        extras.putBoolean(ContentResolver.SYNC_EXTRAS_UPLOAD, true);
131b19e62add0a747127952862bb7bea0b73379edccFred Quintana        ContentResolver.requestSync(mAccount, mAuthority, extras);
132b19e62add0a747127952862bb7bea0b73379edccFred Quintana    }
133b19e62add0a747127952862bb7bea0b73379edccFred Quintana}
134