package org.cyanogenmod.babel;
import android.Manifest;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AccountManagerCallback;
import android.accounts.AccountManagerFuture;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
public class Babel extends Activity {
class AccountAdapter extends ArrayAdapter<Account> {
AccountAdapter() {
super(Babel.this, android.R.layout.simple_list_item_single_choice);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
CheckedTextView tv = (CheckedTextView) view.findViewById(android.R.id.text1);
Account account = getItem(position);
tv.setText(account.name);
return view;
}
}
Account NULL;
ListView lv;
AccountAdapter accountAdapter;
SharedPreferences settings;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
accountAdapter = new AccountAdapter();
settings = getSharedPreferences("settings", MODE_PRIVATE);
LinearLayout statusContainer = (LinearLayout)findViewById(R.id.status_container);
TextView status = (TextView)findViewById(R.id.status);
final String[] permissions = new String[] {
Manifest.permission.BROADCAST_SMS,
Manifest.permission.WRITE_SECURE_SETTINGS,
"android.permission.CANCEL_NOTIFICATIONS",
"android.permission.INTERCEPT_SMS",
};
boolean ok = true;
for (String permission: permissions) {
if (checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_DENIED) {
status.setText(getString(R.string.not_granted, permission));
ok = false;
}
}
if (ok)
statusContainer.setVisibility(View.GONE);
lv = (ListView) findViewById(R.id.list);
lv.setAdapter(accountAdapter = new AccountAdapter());
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Account account = accountAdapter.getItem(position);
if (account == NULL) {
settings.edit().remove("account").remove("rnrse").commit();
return;
}
lv.clearChoices();
lv.requestLayout();
getToken(account, position);
}
});
String selectedAccount = settings.getString("account", null);
NULL = new Account(getString(R.string.disable), "com.google");
accountAdapter.add(NULL);
int selected = 0;
for (Account account : AccountManager.get(this).getAccountsByType("com.google")) {
if (account.name.equals(selectedAccount))
selected = accountAdapter.getCount();
accountAdapter.add(account);
}
lv.setItemChecked(selected, true);
lv.requestLayout();
startService(new Intent(this, BabelService.class));
}
void getToken(final Account account, final int position) {
AccountManager am = AccountManager.get(this);
if (am == null)
return;
am.getAuthToken(account, "grandcentral", null, this, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
try {
Bundle bundle = future.getResult();
final String authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN);
settings.edit()
.putString("account", account.name)
.commit();
lv.setItemChecked(position, true);
lv.requestLayout();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}, new Handler());
}
}