1 /*
2  * Copyright (C) 2016 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.example.android.pushapithirdpartyone;
18 
19 import android.accounts.Account;
20 import android.accounts.AccountManager;
21 import android.accounts.AccountManagerCallback;
22 import android.accounts.AccountManagerFuture;
23 import android.accounts.AuthenticatorDescription;
24 import android.accounts.OnAccountsUpdateListener;
25 import android.app.Activity;
26 import android.app.AlertDialog;
27 import android.content.Context;
28 import android.content.DialogInterface;
29 import android.content.Intent;
30 import android.content.pm.ApplicationInfo;
31 import android.content.pm.PackageManager;
32 import android.os.Bundle;
33 import android.util.Log;
34 import android.view.View;
35 import android.view.WindowManager;
36 import android.widget.Button;
37 import android.widget.CompoundButton;
38 import android.widget.TextView;
39 import android.widget.Toast;
40 import android.widget.ToggleButton;
41 
42 public class MainActivity extends Activity {
43 
44     private static final int REQUEST_CODE_PICK_ACCOUNT = 0;
45     private static final String TAG = "PushApiTestAppOne";
46     private static AccountManager am;
47     private static OnAccountsUpdateListener mListener;
48 
49     @Override
onCreate(Bundle savedInstanceState)50     protected void onCreate(Bundle savedInstanceState) {
51         super.onCreate(savedInstanceState);
52         setContentView(R.layout.activity_main);
53         am = AccountManager.get(getApplicationContext());
54         mListener = new OnAccountsUpdateListener() {
55             @Override
56             public void onAccountsUpdated(Account[] accounts) {
57                 Log.i(TAG, "onAccountsUpdated is called:");
58                 if (accounts != null) {
59                     for (Account account : accounts) {
60                         Log.i(TAG, "visible account: " + account);
61                     }
62                 }
63             }
64         };
65         am.addOnAccountsUpdatedListener(mListener, null, false,
66                 new String[] {"com.example.android.pushapiauthenticator", "com.google"});
67         final TextView visibleAccounts = (TextView) findViewById(R.id.visibleaccounts);
68         final Button getVisibleAccounts = (Button) findViewById(R.id.getvisibleaccounts);
69         final Toast notifOn =
70                 Toast.makeText(getApplicationContext(), "Notifs Turned On!", Toast.LENGTH_SHORT);
71         final Toast notifOff =
72                 Toast.makeText(getApplicationContext(), "Notifs Turned Off!", Toast.LENGTH_SHORT);
73         AlertDialog.Builder builder = new AlertDialog.Builder(this);
74         builder.setMessage("Welcome to Test App 1.\nPlease make sure you have:\n\n1. Test App 2\n"
75                 + "\n2. Auth App \n\ninstalled for the demo. These applications together provide"
76                 + " tests, use cases, and proof of concept of Account Discovery API!\n")
77                 .setTitle("WELCOME")
78                 .setPositiveButton("Okay", new DialogInterface.OnClickListener() {
79                     @Override
80                     public void onClick(DialogInterface dialogInterface, int i) {
81                         // do nothing
82                     }
83                 });
84         AlertDialog dialog = builder.create();
85         dialog.show();
86         getVisibleAccounts.setOnClickListener(new View.OnClickListener() {
87             @Override
88             public void onClick(View view) {
89                 Account[] accountsAccessedByAuthApp = am.getAccounts();
90                 StringBuilder masterString = new StringBuilder();
91                 for (int i = 0; i < accountsAccessedByAuthApp.length; i++) {
92                     masterString.append(accountsAccessedByAuthApp[i].name + ", "
93                             + accountsAccessedByAuthApp[i].type + "\n");
94                 }
95                 if (masterString.length() > 0) {
96                     visibleAccounts.setText(masterString);
97                 } else {
98                     visibleAccounts.setText("----");
99                 }
100 
101                 Intent intent = AccountManager.newChooseAccountIntent(null, null, null, null, null,
102                         null, null); // Show all accounts
103                 startActivityForResult(intent, REQUEST_CODE_PICK_ACCOUNT);
104             }
105         });
106     }
107 
108     @Override
onDestroy()109     protected void onDestroy() {
110         am.removeOnAccountsUpdatedListener(mListener);
111         super.onDestroy();
112     }
113 
114     @Override
onActivityResult(int requestCode, int resultCode, Intent data)115     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
116         if (requestCode == REQUEST_CODE_PICK_ACCOUNT) {
117             // Receiving a result from the AccountPicker
118             if (resultCode == RESULT_OK) {
119                 Toast.makeText(this, data.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE),
120                         Toast.LENGTH_LONG).show();
121             } else if (resultCode == RESULT_CANCELED) {
122                 Toast.makeText(this, "No account was chosen", Toast.LENGTH_LONG).show();
123             }
124         }
125     }
126 }
127