package net.miz_hi.smileessence.system; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.provider.MediaStore; import net.miz_hi.smileessence.Client; import net.miz_hi.smileessence.auth.Account; import net.miz_hi.smileessence.auth.AuthenticationDB; import net.miz_hi.smileessence.auth.AuthorizeHelper; import net.miz_hi.smileessence.auth.Consumers; import net.miz_hi.smileessence.cache.ImageCache; import net.miz_hi.smileessence.cache.TweetCache; import net.miz_hi.smileessence.cache.UserCache; import net.miz_hi.smileessence.core.EnumRequestCode; import net.miz_hi.smileessence.core.MyExecutor; import net.miz_hi.smileessence.data.list.ListManager; import net.miz_hi.smileessence.data.search.Search; import net.miz_hi.smileessence.data.search.SearchManager; import net.miz_hi.smileessence.dialog.SingleButtonDialog; import net.miz_hi.smileessence.model.statuslist.timeline.Timeline; import net.miz_hi.smileessence.model.statuslist.timeline.impl.ListTimeline; import net.miz_hi.smileessence.model.statuslist.timeline.impl.SearchTimeline; import net.miz_hi.smileessence.notification.Notificator; import net.miz_hi.smileessence.preference.EnumPreferenceKey; import net.miz_hi.smileessence.statuslist.StatusListAdapter; import net.miz_hi.smileessence.statuslist.StatusListManager; import net.miz_hi.smileessence.task.impl.GetUserTask; import net.miz_hi.smileessence.twitter.ResponseConverter; import net.miz_hi.smileessence.twitter.TwitterManager; import net.miz_hi.smileessence.view.fragment.impl.ListFragment; import net.miz_hi.smileessence.view.fragment.impl.SearchFragment; import twitter4j.User; public class MainActivitySystem { public AuthorizeHelper authHelper; public Uri tempFilePath; public void onDestroyed() { TwitterManager.closeTwitterStream(); PostSystem.clear(false); ImageCache.clearCache(); TweetCache.clearCache(); UserCache.clearCache(); MyExecutor.shutdown(); } public boolean checkAccount(Activity activity) { if(Client.hasAuthorizedAccount()) { accountSetup(); return true; } else { authHelper = new AuthorizeHelper(activity, Consumers.getDefault()); //NOT AUTHORIZED SingleButtonDialog.show(activity, "認証してください", "認証ページヘ", new Runnable() { @Override public void run() { authHelper.oauthSend(); } }); return false; } } public void authorize(Activity activity, Uri data) { Account account = authHelper.oauthReceive(data); Client.setMainAccount(account); if(checkAccount(activity)) { startTwitter(activity); loadListPage(activity); } } public void accountSetup() { long lastUsedId = Client.getPreferenceValue(EnumPreferenceKey.LAST_USED_USER_ID); for(Account account : AuthenticationDB.instance().findAll()) { if(account.getUserId() == lastUsedId) { Client.setMainAccount(account); break; } } if(Client.getMainAccount() == null) { Client.setMainAccount(AuthenticationDB.instance().findAll().get(0)); } } public void loadListPage(Activity activity) { for(net.miz_hi.smileessence.data.list.List list : ListManager.getLists()) { Timeline timeline = new ListTimeline(list.getListId()); StatusListManager.registerListTimeline(list.getListId(), timeline, new StatusListAdapter(activity, timeline)); timeline.loadNewer(); ListFragment fragment = ListFragment.newInstance(list.getListId(), list.getName()); PageController.getInstance().addPage(fragment); } } public void loadSearchPage(Activity activity) { for(Search search : SearchManager.getSearches()) { SearchTimeline timeline = new SearchTimeline(search.getQuery()); StatusListManager.registerSearchTimeline(search.getId(), timeline, new StatusListAdapter(activity, timeline)); timeline.loadNewer(); SearchFragment fragment = SearchFragment.getInstance(search.getId(), search.getQuery()); PageController.getInstance().addPage(fragment); } } public void startTwitter(Activity activity) { boolean connected = TwitterManager.openTwitterStream(activity); if(connected) { try { new GetUserTask(Client.getMainAccount().getUserId()) { @Override public void onPostExecute(User result) { if(result != null) { ResponseConverter.convert(result); } } }.callAsync().get(); } catch(Exception e) { e.printStackTrace(); Notificator.alert("接続出来ません"); return; } StatusListManager.getHomeTimeline().loadOlder(); StatusListManager.getMentionsTimeline().loadOlder(); } else { Notificator.alert("接続出来ません"); } } public void receivePicture(Activity activity, Intent data, int reqCode) { try { Uri uri; if(reqCode == EnumRequestCode.PICTURE.ordinal()) { uri = data.getData(); } else { uri = tempFilePath; } Cursor c = activity.getContentResolver().query(uri, null, null, null, null); c.moveToFirst(); String path = c.getString(c.getColumnIndex(MediaStore.MediaColumns.DATA)); PostSystem.setPicturePath(path); PostSystem.openPostPage(); Notificator.info("画像をセットしました"); } catch(Exception e) { e.printStackTrace(); Notificator.alert("失敗しました"); } } }