package org.goodev.discourse; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.provider.Browser; import android.text.TextUtils; import android.widget.Toast; import org.goodev.discourse.api.data.Category; import org.goodev.discourse.api.data.Post; import org.goodev.discourse.api.data.Topic; import org.goodev.discourse.photos.PhotosActivity; import org.goodev.discourse.utils.L; import org.goodev.discourse.utils.Utils; import java.util.List; public class ActivityUtils { public static void openCategoryActivity(Activity a, Category c, String url) { Intent intent = new Intent(); intent.setClass(a, CategoryActivity.class); intent.putExtra(Utils.EXTRA_URL, url); intent.putExtra(Utils.EXTRA_TITLE, c.name); intent.putExtra(Utils.EXTRA_SLUG, c.slug); intent.putExtra(Utils.EXTRA_ID, c.id); a.startActivity(intent); } public static void openPhotosActivity(Context a, int index, String[] imgs) { Intent intent = new Intent(a, PhotosActivity.class); intent.putExtra(Utils.EXTRA_NUMBER, index); intent.putExtra(Utils.EXTRA_URL, imgs); if (!(a instanceof Activity)) { intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } a.startActivity(intent); } public static void openNewPrivateMsgEditorActivity(Activity a, String username) { Intent intent = new Intent(a, EditorActivity.class); intent.putExtra(Utils.EXTRA_NAME, username); intent.putExtra(Utils.EXTRA_IS_PRIVATE_MSG, true); a.startActivity(intent); } public static void openNewEditorActivity(Activity a, Post post) { Intent intent = new Intent(a, EditorActivity.class); if (post != null) { intent.putExtra(Utils.EXTRA_ID, post.id); } a.startActivity(intent); } public static void openReplayTopicActivity(Activity a, Topic t, Post p) { Intent intent = new Intent(a, EditorActivity.class); intent.putExtra(Utils.EXTRA_OBJ, t); intent.putExtra(Utils.EXTRA_NAME, p.username); intent.putExtra(Utils.EXTRA_NUMBER, 1); intent.putExtra(Utils.EXTRA_ID, p.id); a.startActivity(intent); } public static void openReplayPostActivity(Activity a, Topic t, Post post, int postNum) { Intent intent = new Intent(a, EditorActivity.class); intent.putExtra(Utils.EXTRA_NAME, post.username); intent.putExtra(Utils.EXTRA_NUMBER, postNum); intent.putExtra(Utils.EXTRA_ID, post.id); intent.putExtra(Utils.EXTRA_OBJ, t); a.startActivity(intent); } public static void startTopicActivity(Context a, String slug, String idStr) { L.i("topic id: %s ----------%b", idStr, (a instanceof Activity)); long id = 0; ; try { id = Long.valueOf(idStr); } catch (NumberFormatException e) { L.e(e); return; } Intent intent = new Intent(a, TopicActivity.class); intent.putExtra(Utils.EXTRA_ID, id); intent.putExtra(Utils.EXTRA_SLUG, slug); if (!(a instanceof Activity)) { intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } a.startActivity(intent); } public static void startTopicActivity(Activity a, String slug, long id) { L.i("topic id: %d", id); Intent intent = new Intent(a, TopicActivity.class); intent.putExtra(Utils.EXTRA_ID, id); intent.putExtra(Utils.EXTRA_SLUG, slug); a.startActivity(intent); } public static void startTopicActivity(Activity a, Topic t, Category c, String url) { L.i("topic category: %s", t.category); Intent intent = new Intent(a, TopicActivity.class); intent.putExtra(Utils.EXTRA_OBJ, t); intent.putExtra(Utils.EXTRA_OBJ_C, c); intent.putExtra(Utils.EXTRA_ID, t.id.longValue()); intent.putExtra(Utils.EXTRA_TITLE, t.title); intent.putExtra(Utils.EXTRA_SLUG, t.slug); intent.putExtra(Utils.EXTRA_URL, url); intent.putExtra(Utils.EXTRA_NUMBER, t.last_read_post_number); a.startActivity(intent); } public static void openUserActivity(Context a, String name) { Intent intent = new Intent(a, UserActivity.class); intent.putExtra(Utils.EXTRA_NAME, name); if (!(a instanceof Activity)) { intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } a.startActivity(intent); } public static void openSocialHelpActivity(Activity a) { Intent intent = new Intent(a, HelpActivity.class); intent.putExtra(Utils.EXTRA_URL, "login.html"); a.startActivity(intent); } public static void openUrl(Context c, String url) { Uri uri = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, uri); intent.putExtra(Browser.EXTRA_APPLICATION_ID, c.getPackageName()); checkContextIsActivity(c, intent); c.startActivity(intent); } private static void checkContextIsActivity(Context a, Intent intent) { if (!(a instanceof Activity)) { intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } } public static void openDiscourseLinks(Context ctx, String url) { final String site = App.getSiteUrl(); if (TextUtils.isEmpty(site)) { Toast.makeText(App.getContext(), R.string.reboot_error, Toast.LENGTH_SHORT).show(); return; } if (url.startsWith(Utils.SLASH)) { url = url.substring(Utils.SLASH.length()); url = site + url; } L.i("... %s ", url); Uri uri = Uri.parse(url); List<String> paths = uri.getPathSegments(); if (paths.size() >= 2) { final String path0 = paths.get(0); if (path0.equals(Utils.USERS)) { String name = paths.get(1); ActivityUtils.openUserActivity(ctx, name); } else if (Utils.T.equals(path0)) { String slug = paths.get(1); String id = paths.get(2); // TODO post index // String postIndex = paths.get(3); ActivityUtils.startTopicActivity(ctx, slug, id); } else { // TODO handler more in app nav... L.e("handler more in app nav..."); } } } }