improved data model

This commit is contained in:
Mariotaku Lee 2015-11-11 16:53:27 +08:00
parent d1c26006c4
commit 0e1ee9d999
12 changed files with 129 additions and 66 deletions

View File

@ -27,7 +27,6 @@ import org.mariotaku.restfu.http.ValueMap;
* *
* @author Yusuke Yamamoto - yusuke at mac.com * @author Yusuke Yamamoto - yusuke at mac.com
*/ */
@Mapper(GeoLocationMapper.class)
public class GeoLocation implements ValueMap { public class GeoLocation implements ValueMap {
double latitude; double latitude;

View File

@ -1,46 +0,0 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.api.twitter.model;
import com.bluelinelabs.logansquare.JsonMapper;
import com.bluelinelabs.logansquare.LoganSquare;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import org.mariotaku.twidere.api.twitter.model.impl.GeoPoint;
import java.io.IOException;
/**
* Created by mariotaku on 15/10/21.
*/
public class GeoLocationMapper extends JsonMapper<GeoLocation> {
@Override
public GeoLocation parse(JsonParser jsonParser) throws IOException {
final GeoPoint geoPoint = LoganSquare.mapperFor(GeoPoint.class).parse(jsonParser);
if (geoPoint == null) return null;
return geoPoint.getGeoLocation();
}
@Override
public void serialize(GeoLocation object, JsonGenerator generator, boolean writeStartAndEnd) throws IOException {
throw new UnsupportedOperationException();
}
}

View File

@ -71,7 +71,7 @@ public class CardEntityImpl implements CardEntity {
} }
@JsonObject @JsonObject
static class ImageValueImpl implements ImageValue { public static class ImageValueImpl implements ImageValue {
@JsonField(name = "width") @JsonField(name = "width")
int width; int width;
@JsonField(name = "height") @JsonField(name = "height")
@ -96,7 +96,7 @@ public class CardEntityImpl implements CardEntity {
} }
static class BooleanValueImpl implements BooleanValue { public static class BooleanValueImpl implements BooleanValue {
public BooleanValueImpl(boolean value) { public BooleanValueImpl(boolean value) {
this.value = value; this.value = value;
@ -110,7 +110,7 @@ public class CardEntityImpl implements CardEntity {
} }
} }
static class StringValueImpl implements StringValue { public static class StringValueImpl implements StringValue {
private final String value; private final String value;
public StringValueImpl(String value) { public StringValueImpl(String value) {
@ -124,7 +124,7 @@ public class CardEntityImpl implements CardEntity {
} }
@JsonObject @JsonObject
static class UserValueImpl implements UserValue { public static class UserValueImpl implements UserValue {
@JsonField(name = "id") @JsonField(name = "id")
long userId; long userId;

View File

@ -32,7 +32,7 @@ public class HashtagEntityImpl implements HashtagEntity {
@JsonField(name = "text") @JsonField(name = "text")
String text; String text;
@JsonField(name = "indices") @JsonField(name = "indices", typeConverter = IndicesConverter.class)
Indices indices; Indices indices;
@Override @Override

View File

@ -19,12 +19,9 @@
package org.mariotaku.twidere.api.twitter.model.impl; package org.mariotaku.twidere.api.twitter.model.impl;
import org.mariotaku.library.logansquare.extension.annotation.Mapper;
/** /**
* Created by mariotaku on 15/3/31. * Created by mariotaku on 15/3/31.
*/ */
@Mapper(IndicesMapper.class)
public class Indices { public class Indices {
private int start, end; private int start, end;

View File

@ -19,7 +19,7 @@
package org.mariotaku.twidere.api.twitter.model.impl; package org.mariotaku.twidere.api.twitter.model.impl;
import com.bluelinelabs.logansquare.JsonMapper; import com.bluelinelabs.logansquare.typeconverters.TypeConverter;
import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.core.JsonToken;
@ -27,9 +27,9 @@ import com.fasterxml.jackson.core.JsonToken;
import java.io.IOException; import java.io.IOException;
/** /**
* Created by mariotaku on 15/10/21. * Created by mariotaku on 15/11/11.
*/ */
public class IndicesMapper extends JsonMapper<Indices> { public class IndicesConverter implements TypeConverter<Indices> {
@Override @Override
public Indices parse(JsonParser jsonParser) throws IOException { public Indices parse(JsonParser jsonParser) throws IOException {
final int start, end; final int start, end;
@ -42,7 +42,7 @@ public class IndicesMapper extends JsonMapper<Indices> {
} }
@Override @Override
public void serialize(Indices object, JsonGenerator generator, boolean writeStartAndEnd) throws IOException { public void serialize(Indices instance, String fieldName, boolean writeFieldNameForObject, JsonGenerator jsonGenerator) throws IOException {
throw new UnsupportedOperationException();
} }
} }

View File

@ -50,7 +50,7 @@ public class QueryResultWrapper extends TwitterResponseImpl implements TwitterMo
} }
@JsonObject @JsonObject
static class SearchMetadata { public static class SearchMetadata {
@JsonField(name = "max_id") @JsonField(name = "max_id")
long maxId; long maxId;
@JsonField(name = "since_id") @JsonField(name = "since_id")

View File

@ -131,7 +131,7 @@ public class RelationshipImpl extends TwitterResponseImpl implements Relationshi
} }
@JsonObject @JsonObject
static class Target { public static class Target {
@JsonField(name = "id") @JsonField(name = "id")
long id; long id;
@JsonField(name = "screen_name") @JsonField(name = "screen_name")
@ -145,7 +145,7 @@ public class RelationshipImpl extends TwitterResponseImpl implements Relationshi
} }
@JsonObject @JsonObject
static class Source { public static class Source {
@JsonField(name = "id") @JsonField(name = "id")
long id; long id;
@JsonField(name = "screen_name") @JsonField(name = "screen_name")

View File

@ -80,7 +80,7 @@ public class StatusImpl extends TwitterResponseImpl implements Status {
UserImpl user; UserImpl user;
@JsonField(name = "geo") @JsonField(name = "geo")
GeoLocation geo; GeoPoint geo;
@JsonField(name = "place") @JsonField(name = "place")
Place place; Place place;
@ -215,7 +215,8 @@ public class StatusImpl extends TwitterResponseImpl implements Status {
@Override @Override
public GeoLocation getGeoLocation() { public GeoLocation getGeoLocation() {
return geo; if (geo == null) return null;
return geo.getGeoLocation();
} }
@Override @Override
@ -336,7 +337,7 @@ public class StatusImpl extends TwitterResponseImpl implements Status {
} }
@JsonObject @JsonObject
static class CurrentUserRetweet { public static class CurrentUserRetweet {
@JsonField(name = "id") @JsonField(name = "id")
long id; long id;

View File

@ -52,6 +52,7 @@ import edu.tsinghua.hotmobi.model.MediaEvent;
import edu.tsinghua.hotmobi.model.NetworkEvent; import edu.tsinghua.hotmobi.model.NetworkEvent;
import edu.tsinghua.hotmobi.model.NotificationEvent; import edu.tsinghua.hotmobi.model.NotificationEvent;
import edu.tsinghua.hotmobi.model.RefreshEvent; import edu.tsinghua.hotmobi.model.RefreshEvent;
import edu.tsinghua.hotmobi.model.ScreenEvent;
import edu.tsinghua.hotmobi.model.ScrollRecord; import edu.tsinghua.hotmobi.model.ScrollRecord;
import edu.tsinghua.hotmobi.model.SessionEvent; import edu.tsinghua.hotmobi.model.SessionEvent;
import edu.tsinghua.hotmobi.model.TweetEvent; import edu.tsinghua.hotmobi.model.TweetEvent;
@ -192,4 +193,8 @@ public class HotMobiLogger {
public void logList(List<?> events, long accountId, String type) { public void logList(List<?> events, long accountId, String type) {
mExecutor.execute(new WriteLogTask(mApplication, accountId, type, events)); mExecutor.execute(new WriteLogTask(mApplication, accountId, type, events));
} }
public static void logScreenEvent(Context context, ScreenEvent.Action action) {
getInstance(context).log(ScreenEvent.create(context, action));
}
} }

View File

@ -0,0 +1,85 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2015 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package edu.tsinghua.hotmobi.model;
import android.content.Context;
import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
import com.bluelinelabs.logansquare.typeconverters.StringBasedTypeConverter;
/**
* Created by mariotaku on 15/11/11.
*/
@JsonObject
public class ScreenEvent extends BaseEvent {
@JsonField(name = "action", typeConverter = Action.ScreenActionConverter.class)
Action action;
public Action getAction() {
return action;
}
public void setAction(Action action) {
this.action = action;
}
public static ScreenEvent create(Context context, Action action) {
final ScreenEvent event = new ScreenEvent();
event.markStart(context);
event.setAction(action);
return event;
}
public enum Action {
ON("on"), OFF("off"), UNKNOWN("unknown");
private final String value;
Action(String value) {
this.value = value;
}
public static Action parse(String action) {
if (ON.value.equalsIgnoreCase(action)) {
return ON;
} else if (OFF.value.equalsIgnoreCase(action)) {
return OFF;
}
return UNKNOWN;
}
public static class ScreenActionConverter extends StringBasedTypeConverter<Action> {
@Override
public Action getFromString(String string) {
return Action.parse(string);
}
@Override
public String convertToString(Action action) {
if (action == null) return null;
return action.value;
}
}
}
}

View File

@ -47,6 +47,7 @@ import java.util.Arrays;
import javax.inject.Inject; import javax.inject.Inject;
import edu.tsinghua.hotmobi.HotMobiLogger; import edu.tsinghua.hotmobi.HotMobiLogger;
import edu.tsinghua.hotmobi.model.ScreenEvent;
import static org.mariotaku.twidere.util.ParseUtils.parseInt; import static org.mariotaku.twidere.util.ParseUtils.parseInt;
import static org.mariotaku.twidere.util.Utils.getAccountIds; import static org.mariotaku.twidere.util.Utils.getAccountIds;
@ -146,6 +147,22 @@ public class RefreshService extends Service implements Constants {
} }
}; };
private final BroadcastReceiver mScreenStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
case Intent.ACTION_SCREEN_ON: {
HotMobiLogger.logScreenEvent(context, ScreenEvent.Action.ON);
break;
}
case Intent.ACTION_SCREEN_OFF: {
HotMobiLogger.logScreenEvent(context, ScreenEvent.Action.ON);
break;
}
}
}
};
@Override @Override
public IBinder onBind(final Intent intent) { public IBinder onBind(final Intent intent) {
return null; return null;
@ -177,7 +194,11 @@ public class RefreshService extends Service implements Constants {
batteryFilter.addAction(Intent.ACTION_BATTERY_LOW); batteryFilter.addAction(Intent.ACTION_BATTERY_LOW);
batteryFilter.addAction(Intent.ACTION_POWER_CONNECTED); batteryFilter.addAction(Intent.ACTION_POWER_CONNECTED);
batteryFilter.addAction(Intent.ACTION_POWER_DISCONNECTED); batteryFilter.addAction(Intent.ACTION_POWER_DISCONNECTED);
final IntentFilter screenFilter = new IntentFilter();
screenFilter.addAction(Intent.ACTION_SCREEN_ON);
screenFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(mPowerStateReceiver, batteryFilter); registerReceiver(mPowerStateReceiver, batteryFilter);
registerReceiver(mScreenStateReceiver, screenFilter);
PowerStateReceiver.setServiceReceiverStarted(true); PowerStateReceiver.setServiceReceiverStarted(true);
startAutoRefresh(); startAutoRefresh();
} }
@ -185,6 +206,7 @@ public class RefreshService extends Service implements Constants {
@Override @Override
public void onDestroy() { public void onDestroy() {
PowerStateReceiver.setServiceReceiverStarted(false); PowerStateReceiver.setServiceReceiverStarted(false);
unregisterReceiver(mScreenStateReceiver);
unregisterReceiver(mPowerStateReceiver); unregisterReceiver(mPowerStateReceiver);
unregisterReceiver(mStateReceiver); unregisterReceiver(mStateReceiver);
if (hasAutoRefreshAccounts(this)) { if (hasAutoRefreshAccounts(this)) {