package org.aisen.weibo.sina.support.utils;
import android.app.Activity;
import android.content.DialogInterface;
import com.afollestad.materialdialogs.AlertDialogWrapper;
import org.aisen.android.common.context.GlobalContext;
import org.aisen.android.common.utils.Logger;
import org.aisen.android.component.orm.extra.Extra;
import org.aisen.weibo.sina.R;
import org.aisen.weibo.sina.base.AppContext;
import org.aisen.weibo.sina.service.OfflineService;
import org.aisen.weibo.sina.sinasdk.bean.Group;
import org.aisen.weibo.sina.support.sqlit.SinaDB;
import java.util.ArrayList;
import java.util.List;
/**
* Created by wangdan on 15/5/3.
*/
public class OfflineUtils {
public static final String TAG = "Offline-Utils";
/**
* 触发一次离线,如果没有设置过离线分组,优先设置后再离线
*
* @param context
*/
public static void toggleOffline(final Activity context) {
if (!AppContext.isLoggedIn())
return;
List<Group> groups = SinaDB.getOfflineSqlite().select(new Extra(AppContext.getAccount().getUser().getIdstr(), null), Group.class);
if (groups.size() == 0) {
Logger.d(TAG, "离线分组未设置过");
new AlertDialogWrapper.Builder(context)
.setMessage(R.string.offline_none_groups_remind)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.yes,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showOfflineGroupsModifyDialog(context, new ArrayList<Group>(),
new OnOfflineGroupSetCallback() {
@Override
public void onChanged(List<Group> newGroups) {
// 设置离线分组
Logger.d(TAG, "设置离线分组%d个", newGroups.size());
if (newGroups.size() > 0) {
SinaDB.getOfflineSqlite().insert(getLoggedExtra(null), newGroups);
toggleOffline(context);
}
}
},
R.string.offline_groups_dialog);
}
})
.show();
}
else {
OfflineService.startOffline((ArrayList) groups);
}
}
/**
* 显示一个Dialog,用来设置分组
*
* @param activity
* @param selectedGroups
* @param callback
* @param titleId
*/
public static void showOfflineGroupsModifyDialog(Activity activity, List<Group> selectedGroups,
final OnOfflineGroupSetCallback callback, int titleId) {
String[] items = new String[AppContext.getAccount().getGroups().getLists().size()];
final boolean[] editCheckedItems = new boolean[AppContext.getAccount().getGroups().getLists().size()];
for (int i = 0; i < AppContext.getAccount().getGroups().getLists().size(); i++) {
Group group = AppContext.getAccount().getGroups().getLists().get(i);
items[i] = group.getName();
editCheckedItems[i] = false;
for (Group groupSelectd : selectedGroups) {
if (groupSelectd.getId().equals(group.getIdstr())) {
editCheckedItems[i] = true;
break;
}
}
}
AlertDialogWrapper.Builder dialogBuilder = new AlertDialogWrapper.Builder(activity)
.setTitle(titleId)
.setMultiChoiceItems(items, editCheckedItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
editCheckedItems[which] = isChecked;
}
});
dialogBuilder.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 艹,这个控件这里有bug
GlobalContext.getInstance().getHandler()
.postDelayed(new Runnable() {
@Override
public void run() {
List<Group> groups = new ArrayList<Group>();
for (int i = 0; i < editCheckedItems.length; i++) {
if (editCheckedItems[i]) {
groups.add(AppContext.getAccount().getGroups().getLists().get(i));
}
}
callback.onChanged(groups);
}
}, 300);
}
})
.show();
}
public static Extra getLoggedExtra(String key) {
return new Extra(AppContext.getAccount().getUser().getIdstr(), key);
}
public interface OnOfflineGroupSetCallback {
public void onChanged(List<Group> newGroups);
}
}