/*
* Copyright (c) 2015 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com>
* All Rights Reserved.
*/
package me.zhanghai.android.douya.link;
import android.content.Context;
import android.content.Intent;
import android.content.UriMatcher;
import android.net.Uri;
import me.zhanghai.android.douya.BuildConfig;
import me.zhanghai.android.douya.broadcast.ui.BroadcastActivity;
import me.zhanghai.android.douya.broadcast.ui.BroadcastListActivity;
import me.zhanghai.android.douya.followship.ui.FollowerListActivity;
import me.zhanghai.android.douya.followship.ui.FollowingListActivity;
import me.zhanghai.android.douya.item.ui.MovieActivity;
import me.zhanghai.android.douya.profile.ui.ProfileActivity;
import me.zhanghai.android.douya.util.UriUtils;
public class DoubanUriHandler {
private static final String AUTHORITY = "www.douban.com";
private static final String AUTHORITY_MOVIE = "movie.douban.com";
private static final String AUTHORITY_FRODO = "douban.com";
private enum UriType {
USER_BROADCAST_LIST("people/*/statuses"),
TOPIC_BROADCAST_LIST("update/topic/*"),
BROADCAST("people/*/status/#"),
BROADCAST_FRODO(AUTHORITY_FRODO, "status/#"),
USER("people/*"),
USER_FOLLOWER_LIST("people/*/rev_contacts"),
USER_FOLLOWER_LIST_FRODO(AUTHORITY_FRODO, "user/*/follower"),
USER_FOLLOWING_LIST("people/*/contacts"),
USER_FOLLOWING_LIST_FRODO(AUTHORITY_FRODO, "user/*/following"),
MOVIE(AUTHORITY_MOVIE, "subject/#"),
MOVIE_FRODO(AUTHORITY_FRODO, "movie/#");
String mAuthority;
String mPath;
UriType(String authority, String path) {
mAuthority = authority;
mPath = path;
}
UriType(String path) {
this(AUTHORITY, path);
}
public String getAuthority() {
return mAuthority;
}
public String getPath() {
return mPath;
}
}
private static final UriMatcher MATCHER;
static {
MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
for (UriType uriType : UriType.values()) {
MATCHER.addURI(uriType.getAuthority(), uriType.getPath(), uriType.ordinal());
}
}
private DoubanUriHandler() {}
public static boolean open(Uri uri, Context context) {
int code = MATCHER.match(uri);
if (code == UriMatcher.NO_MATCH) {
return false;
}
UriType uriType = UriType.values()[code];
Intent intent;
switch (uriType) {
case USER_BROADCAST_LIST:
intent = BroadcastListActivity.makeIntent(uri.getPathSegments().get(1), context);
break;
case TOPIC_BROADCAST_LIST:
intent = BroadcastListActivity.makeTopicIntent(uri.getLastPathSegment(), context);
break;
case BROADCAST:
case BROADCAST_FRODO:
intent = BroadcastActivity.makeIntent(UriUtils.parseId(uri), context);
break;
case USER:
intent = ProfileActivity.makeIntent(uri.getLastPathSegment(), context);
break;
case USER_FOLLOWER_LIST:
case USER_FOLLOWER_LIST_FRODO:
intent = FollowerListActivity.makeIntent(uri.getPathSegments().get(1), context);
break;
case USER_FOLLOWING_LIST:
case USER_FOLLOWING_LIST_FRODO:
intent = FollowingListActivity.makeIntent(uri.getPathSegments().get(1), context);
break;
case MOVIE:
case MOVIE_FRODO:
// FIXME: Not finished, disable for release build.
if (BuildConfig.DEBUG) {
return false;
}
intent = MovieActivity.makeIntent(UriUtils.parseId(uri), context);
break;
default:
return false;
}
context.startActivity(intent);
return true;
}
public static boolean open(String uri, Context context) {
return open(Uri.parse(uri), context);
}
}