package com.kescoode.xmail.ui.activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import com.kescoode.adk.log.Logger;
import com.kescoode.adk.ui.ImmersiveSearchBar;
import com.kescoode.xmail.R;
import com.kescoode.xmail.controller.MailManager;
import com.kescoode.xmail.domain.Account;
import com.kescoode.xmail.domain.LocalFolder;
import com.kescoode.xmail.event.SyncFolderEvent;
import com.kescoode.xmail.service.MailService;
import com.kescoode.xmail.service.TimerService;
import com.kescoode.xmail.service.aidl.IRemoteMailService;
import com.kescoode.xmail.ui.activity.internal.MailConnActivity;
import com.kescoode.xmail.ui.adapter.MailListAdapter;
import com.melnykov.fab.FloatingActionButton;
import de.greenrobot.event.EventBus;
import java.util.List;
public class HomeActivity extends MailConnActivity implements SwipeRefreshLayout.OnRefreshListener {
@InjectView(R.id.srl_index)
SwipeRefreshLayout srlIndex;
@InjectView(R.id.rcv_mails)
RecyclerView rcVMails;
@InjectView(R.id.fab_new)
FloatingActionButton fabNew;
@InjectView(R.id.search_bar)
ImmersiveSearchBar isbSearch;
private EventBus bus = EventBus.getDefault();
private final ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mailService = IRemoteMailService.Stub.asInterface(service);
firstRefreshInit();
}
@Override
public void onServiceDisconnected(ComponentName name) {
mailService = null;
}
};
private MailListAdapter adapter;
private MailManager mailManager;
private Account currentAccount;
private LocalFolder currentFolder;
private boolean firstRefresh = false;
public static void start4Login(Context context) {
Intent intent = new Intent(context, HomeActivity.class);
intent.putExtra("is_login", true);
context.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startAppService();
initData();
}
private void startAppService() {
// TODO: 考虑以后使用隐式URI来做 */
Intent intent = new Intent(this, MailService.class);
/* 启动MailService */
startService(intent);
intent = new Intent(this, TimerService.class);
/* 启动TimerService */
startService(intent);
}
private void initData() {
mailManager = MailManager.getSingleTon(getApplicationContext());
mailManager.dB2Account();
List<Account> accounts = mailManager.getAccounts();
if (accounts.size() == 0) {
AccountActivity.start(this, AccountActivity.TYPE_LOGIN);
finish();
} else {
setContentView(R.layout.activity_home);
ButterKnife.inject(this);
currentAccount = accounts.get(0);
setFolder(currentAccount.getFolder(currentAccount.getInboxFolderName()));
initViews();
}
}
private void initViews() {
srlIndex.setColorSchemeResources(R.color.purple,
R.color.green_light,
R.color.orange_light,
R.color.red_light);
srlIndex.setOnRefreshListener(this);
rcVMails.setHasFixedSize(true);
rcVMails.setLayoutManager(new LinearLayoutManager(this));
adapter = new MailListAdapter(this);
rcVMails.setAdapter(adapter);
adapter.setDataSet(currentFolder);
fabNew.attachToRecyclerView(rcVMails);
isbSearch.setBackListener(new ImmersiveSearchBar.ActionBackListener() {
@Override
public void back() {
isbSearch.showKeyboard(false);
isbSearch.setVisibility(View.GONE);
}
});
isbSearch.setHint(R.string.search_email);
}
private void firstRefreshInit() {
if (!firstRefresh) {
Intent intent = getIntent();
if (intent.getBooleanExtra("is_login", false)) {
if (!srlIndex.isRefreshing()) {
srlIndex.setRefreshing(true);
onRefresh();
}
}
firstRefresh = true;
}
}
@Override
public void onRefresh() {
try {
mailService.syncFolder(currentAccount.getId(), currentFolder.getName(), 0);
} catch (RemoteException e) {
Logger.e("Can not bind Service");
}
}
@Override
protected void onResume() {
super.onResume();
if (!bus.isRegistered(this)) {
bus.register(this);
}
}
@Override
protected void onPause() {
super.onPause();
if (bus.isRegistered(this)) {
bus.unregister(this);
}
}
@Override
protected ServiceConnection getConn() {
return conn;
}
public void onEvent(SyncFolderEvent event) {
srlIndex.setRefreshing(false);
adapter.setDataSet(currentFolder);
}
@OnClick(R.id.fab_new)
void onFabNewClick() {
MailOperationActivity.startMailOperation4Write(this, currentAccount.getId());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_home_actions, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_search:
isbSearch.appear(this);
return true;
case R.id.action_about:
InformationActivity.startAbout(this);
return true;
}
return super.onOptionsItemSelected(item);
}
public void setFolder(LocalFolder folder) {
currentFolder = folder;
getSupportActionBar().setTitle(currentAccount.getDisplayFolderName(currentFolder.getName()));
}
}