/** * Copyright (c) 2013, Redsolution LTD. All rights reserved. * * This file is part of Xabber project; you can redistribute it and/or * modify it under the terms of the GNU General Public License, Version 3. * * Xabber 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 com.xabber.android.data.intent; import android.content.Context; import android.content.Intent; import android.net.Uri; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class SegmentIntentBuilder<T extends SegmentIntentBuilder<?>> extends BaseIntentBuilder<T> { private final List<String> segments; public SegmentIntentBuilder(Context context, Class<?> cls) { super(context, cls); segments = new ArrayList<>(); } protected int getSegmentCount() { return segments.size(); } @SuppressWarnings("unchecked") public T addSegment(String segment) { segments.add(segment); return (T) this; } void preBuild() { } @Override public Intent build() { preBuild(); Intent intent = super.build(); Uri.Builder builder = new Uri.Builder(); for (String segment : segments) builder.appendPath(segment); Uri uri = builder.build(); uri = Uri.parse(uri.toString()); // Workaround for android 1.5 intent.setData(uri); return intent; } /** * Parse segments from the intent. * * @param intent * @return */ static List<String> getSegments(Intent intent) { Uri uri = intent.getData(); if (uri == null) { List<String> emptyList = Collections.emptyList(); return emptyList; } return uri.getPathSegments(); } /** * @param intent * @param index * @return Segment from the intent data uri or <code>null</code>. */ public static String getSegment(Intent intent, int index) { Uri uri = intent.getData(); if (uri == null) return null; List<String> list = uri.getPathSegments(); if (list.size() <= index) return null; return list.get(index); } }