package com.zulip.android.activities;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.Toast;
import com.zulip.android.R;
import com.zulip.android.networking.AsyncDevGetEmails;
import com.zulip.android.networking.response.LoginResponse;
import com.zulip.android.networking.util.DefaultCallback;
import com.zulip.android.util.AuthClickListener;
import com.zulip.android.util.CommonProgressDialog;
import com.zulip.android.util.ZLog;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import retrofit2.Call;
import retrofit2.Response;
/**
* Activity where the Emails for the DevAuthBackend are displayed.
*/
public class DevAuthActivity extends BaseActivity {
private RecyclerView recyclerView;
private CommonProgressDialog commonProgressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dev_auth);
String json = getIntent().getStringExtra(AsyncDevGetEmails.EMAIL_JSON);
recyclerView = (RecyclerView) findViewById(R.id.devAuthRecyclerView);
List<String> emails = new ArrayList<>();
int directAdminSize = 1;
commonProgressDialog = new CommonProgressDialog(this);
try {
JSONObject jsonObject = new JSONObject(json);
JSONArray jsonArray = jsonObject.getJSONArray("direct_admins");
for (int i = 0; i < jsonArray.length(); i++) {
emails.add(jsonArray.get(i).toString());
}
directAdminSize = jsonArray.length();
jsonArray = jsonObject.getJSONArray("direct_users");
for (int i = 0; i < jsonArray.length(); i++) {
emails.add(jsonArray.get(i).toString());
}
} catch (JSONException e) {
ZLog.logException(e);
}
AuthEmailAdapter authEmailAdapter = new AuthEmailAdapter(emails, directAdminSize, DevAuthActivity.this);
recyclerView.setAdapter(authEmailAdapter);
authEmailAdapter.setOnItemClickListener(new AuthClickListener() {
@Override
public void onItemClick(String email) {
commonProgressDialog.showWithMessage(getString(R.string.signing_in));
getServices()
.loginDEV(email)
.enqueue(new DefaultCallback<LoginResponse>() {
@Override
public void onSuccess(Call<LoginResponse> call, Response<LoginResponse> response) {
getApp().setLoggedInApiKey(response.body().getApiKey(), response.body().getEmail());
openHome();
}
@Override
public void onError(Call<LoginResponse> call, Response<LoginResponse> response) {
// do nothing
Toast.makeText(DevAuthActivity.this, R.string.login_failed, Toast.LENGTH_LONG).show();
commonProgressDialog.dismiss();
}
});
}
});
recyclerView.setLayoutManager(new LinearLayoutManager(DevAuthActivity.this) {
});
}
public void openHome() {
// Cancel before leaving activity to avoid leaking windows
commonProgressDialog.dismiss();
Intent i = new Intent(this, ZulipActivity.class);
startActivity(i);
finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (commonProgressDialog != null && commonProgressDialog.isShowing()) {
commonProgressDialog.dismiss();
}
}
}