package io.codetail.sources; import android.accounts.Account; import android.graphics.drawable.Drawable; import android.net.Uri; import android.support.v4.app.FragmentManager; import io.codetail.WatchMeActivity; import io.codetail.client.auth.Authenticator; import io.codetail.fragments.BaseWatchMeFragment; import io.codetail.work.JobManager; public abstract class Source { /** * @return the default source to use */ public static Source getDefaultSource(){ return new MoverSource(); } /** * Invoked from {@link android.accounts.AbstractAccountAuthenticator} * to retrieve valid token for {@link android.accounts.Account} * * @param account Account requested to auth token * @param password Account password * * @return valid authentication token, can be null */ public abstract String getAuthToken(Account account, String password); /** * @return Ask the authenticator for a localized label for the given authTokenType. * {@link android.accounts.AbstractAccountAuthenticator#getAuthTokenLabel(String)} */ public abstract String getLabel(); /** * TODO * * @return authenticator */ public abstract Authenticator getAuthenticator(); /** * @param token auth token * @return true if given token is valid and can be used */ public abstract boolean isValidAuthToken(String token); /** * @return categories or any navigation items to show */ public abstract CharSequence[] getNavigationItems(); /** * @return navigation icons to show */ public abstract Drawable[] getNavigationIcons(); /** * Source id name * example: example.com id will be com.example * * @return source id */ public abstract String getSourceId(); /** * On new navigation item selected from {@link io.codetail.fragments.NavigationFragment} * * @param position position of new selected item */ public abstract void onNavigationItemSelected(FragmentManager manager, int position); /** * Open default fragment * * @return default fragment */ public abstract BaseWatchMeFragment openDefaultFragment(FragmentManager manager, boolean addToBackStack); /** * Open search fragment * * @return search fragment */ public abstract BaseWatchMeFragment openSearchFragment(FragmentManager manager); /** * Invoked when new external intent available and has * {@link android.content.Intent#ACTION_VIEW}, * {@link android.content.Intent#CATEGORY_BROWSABLE} * flags and not empty {@link android.content.Intent#getData()} * * Return true if you handled it * * @return true if this source can handle intercepted intent */ public abstract boolean onIntentCatched(WatchMeActivity activity, JobManager manager, Uri uri); }