package com.microsoft.aad.taskapplication;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import com.microsoft.aad.adal.AuthenticationCallback;
import com.microsoft.aad.adal.AuthenticationContext;
import com.microsoft.aad.adal.AuthenticationResult;
import com.microsoft.aad.adal.ITokenStoreQuery;
import com.microsoft.aad.adal.PromptBehavior;
import com.microsoft.aad.adal.TokenCacheItem;
import com.microsoft.aad.taskapplication.helpers.Constants;
import com.microsoft.aad.taskapplication.helpers.InMemoryCacheStore;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
public class UsersListActivity extends Activity {
private AuthenticationContext mAuthContext;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_users_list);
mAuthContext= new AuthenticationContext(UsersListActivity.this, Constants.AUTHORITY_URL,
false, InMemoryCacheStore.getInstance());
Button button = (Button) findViewById(R.id.userListCancelButton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
button = (Button) findViewById(R.id.addUserButton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(Constants.CORRELATION_ID != null &&
Constants.CORRELATION_ID.trim().length() !=0){
mAuthContext.setRequestCorrelationId(UUID.fromString(Constants.CORRELATION_ID));
}
mAuthContext.acquireToken(UsersListActivity.this, Constants.RESOURCE_ID, Constants.CLIENT_ID,
Constants.REDIRECT_URL, Constants.USER_HINT, PromptBehavior.REFRESH_SESSION,
"nux=1" + Constants.EXTRA_QP, new AuthenticationCallback<AuthenticationResult>() {
@Override
public void onSuccess(AuthenticationResult result) {
Constants.CURRENT_RESULT = result;
finish();
startActivity(getIntent());
}
@Override
public void onError(Exception exc) {
SimpleAlertDialog.showAlertDialog(UsersListActivity.this, "Exception caught", exc.getMessage());
}
});
}
});
ListView listview = (ListView) findViewById(R.id.usersList);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, refreshedUsersList());
listview.setAdapter(adapter);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view,
int position, long id) {
final String item = (String) parent.getItemAtPosition(position);
callAdal(item);
}
});
}
private List<String> refreshedUsersList() {
List<String> list = new ArrayList<>();
ITokenStoreQuery cacheStoreQuery = InMemoryCacheStore.getInstance();
Iterator<TokenCacheItem> iter = cacheStoreQuery.getAll();
while (iter.hasNext()) {
TokenCacheItem item = iter.next();
if (item.getUserInfo() != null && !list.contains(item.getUserInfo().getDisplayableId())) {
list.add(item.getUserInfo().getDisplayableId());
}
}
return list;
}
private void callAdal(String user) {
if(Constants.CORRELATION_ID != null &&
Constants.CORRELATION_ID.trim().length() !=0){
mAuthContext.setRequestCorrelationId(UUID.fromString(Constants.CORRELATION_ID));
}
mAuthContext.acquireToken(UsersListActivity.this, Constants.RESOURCE_ID, Constants.CLIENT_ID,
Constants.REDIRECT_URL, user, PromptBehavior.REFRESH_SESSION,
"nux=1&" + Constants.EXTRA_QP, new AuthenticationCallback<AuthenticationResult>() {
@Override
public void onSuccess(AuthenticationResult result) {
Constants.CURRENT_RESULT = result;
finish();
}
@Override
public void onError(Exception exc) {
SimpleAlertDialog.showAlertDialog(UsersListActivity.this, "Exception caught", exc.getMessage());
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (mAuthContext != null) {
mAuthContext.onActivityResult(requestCode, resultCode, data);
}
}
}