Search in sources :

Example 1 with User

use of com.github.moko256.latte.client.base.entity.User in project twicalico by moko256.

the class MainActivity method updateDrawerImage.

private void updateDrawerImage() {
    subscription.add(Single.create(subscriber -> {
        try {
            User me = GlobalApplication.userCache.get(GlobalApplication.userId);
            if (me == null) {
                me = GlobalApplication.twitter.verifyCredentials();
                GlobalApplication.userCache.add(me);
            }
            subscriber.onSuccess(me);
        } catch (TwitterException e) {
            subscriber.onError(e);
        }
    }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(result -> {
        User user = (User) result;
        userNameText.setText(user.getName());
        userIdText.setText(TwitterStringUtils.plusAtMark(user.getScreenName()));
        userImage.setOnClickListener(v -> startMyUserActivity());
        GlideRequests requests = GlideApp.with(this);
        requests.load(user.get400x400ProfileImageURLHttps()).circleCrop().into(userImage);
        requests.load(user.getProfileBannerRetinaURL()).centerCrop().into(userBackgroundImage);
    }, Throwable::printStackTrace));
}
Also used : NavigationView(android.support.design.widget.NavigationView) LinearLayout(android.widget.LinearLayout) Type(com.github.moko256.twicalico.entity.Type) Bundle(android.os.Bundle) ImageView(android.widget.ImageView) CachedUsersSQLiteOpenHelper(com.github.moko256.twicalico.database.CachedUsersSQLiteOpenHelper) AndroidSchedulers(rx.android.schedulers.AndroidSchedulers) Intent(android.content.Intent) NonNull(android.support.annotation.NonNull) TwitterStringUtils(com.github.moko256.twicalico.text.TwitterStringUtils) MenuItem(android.view.MenuItem) ArrayList(java.util.ArrayList) TabLayout(android.support.design.widget.TabLayout) GravityCompat(android.support.v4.view.GravityCompat) Single(rx.Single) Menu(android.view.Menu) Schedulers(rx.schedulers.Schedulers) User(twitter4j.User) View(android.view.View) TwitterException(twitter4j.TwitterException) PreferenceManager(android.preference.PreferenceManager) DrawerLayout(android.support.v4.widget.DrawerLayout) AccessToken(com.github.moko256.twicalico.entity.AccessToken) Fragment(android.support.v4.app.Fragment) ActivityOptionsCompat(android.support.v4.app.ActivityOptionsCompat) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) AppCompatActivity(android.support.v7.app.AppCompatActivity) ViewGroup(android.view.ViewGroup) CompositeSubscription(rx.subscriptions.CompositeSubscription) RecyclerView(android.support.v7.widget.RecyclerView) FragmentManager(android.support.v4.app.FragmentManager) AlertDialog(android.support.v7.app.AlertDialog) TextView(android.widget.TextView) SharedPreferences(android.content.SharedPreferences) Toolbar(android.support.v7.widget.Toolbar) Pair(android.support.v4.util.Pair) TokenSQLiteOpenHelper(com.github.moko256.twicalico.database.TokenSQLiteOpenHelper) FragmentPagerAdapter(com.github.moko256.twicalico.widget.FragmentPagerAdapter) ActionBarDrawerToggle(android.support.v7.app.ActionBarDrawerToggle) User(twitter4j.User) TwitterException(twitter4j.TwitterException)

Example 2 with User

use of com.github.moko256.latte.client.base.entity.User in project twicalico by moko256.

the class MainActivity method onCreate.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    subscription = new CompositeSubscription();
    toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    toolbar.getChildAt(0).setOnClickListener(v -> {
        Fragment fragment = getMainFragment();
        if (fragment instanceof MovableTopInterface) {
            ((MovableTopInterface) fragment).moveToTop();
        }
    });
    drawer = findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();
    drawer.addDrawerListener(new DrawerLayout.DrawerListener() {

        @Override
        public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {
        }

        @Override
        public void onDrawerOpened(@NonNull View drawerView) {
        }

        @Override
        public void onDrawerClosed(@NonNull View drawerView) {
            if (isDrawerAccountsSelection) {
                changeIsDrawerAccountsSelection();
            }
        }

        @Override
        public void onDrawerStateChanged(int newState) {
        }
    });
    navigationView = findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(item -> {
        int id = item.getItemId();
        if (!item.isChecked()) {
            switch(id) {
                case R.id.nav_timeline:
                    replaceFragment(new HomeTimeLineFragment());
                    break;
                case R.id.nav_mentions:
                    replaceFragment(new MentionsFragment());
                    break;
                case R.id.nav_account:
                    startMyUserActivity();
                    break;
                case R.id.nav_follow_and_follower:
                    replaceFragment(new MyFollowFollowerFragment());
                    break;
                case R.id.nav_like:
                    replaceFragment(UserLikeFragment.newInstance(GlobalApplication.userId));
                    break;
                case R.id.nav_settings:
                    startActivity(new Intent(this, SettingsActivity.class));
                    break;
            }
        }
        drawer.closeDrawer(GravityCompat.START);
        return (id != R.id.nav_settings) && (id != R.id.nav_account);
    });
    headerView = navigationView.inflateHeaderView(R.layout.nav_header_main);
    userNameText = headerView.findViewById(R.id.user_name);
    userIdText = headerView.findViewById(R.id.user_id);
    userImage = headerView.findViewById(R.id.user_image);
    userBackgroundImage = headerView.findViewById(R.id.user_bg_image);
    userBackgroundImage.setOnClickListener(v -> changeIsDrawerAccountsSelection());
    updateDrawerImage();
    accountListView = new RecyclerView(this);
    accountListView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
    accountListView.setLayoutManager(new LinearLayoutManager(this));
    accountListView.setOverScrollMode(View.OVER_SCROLL_NEVER);
    accountListView.setVisibility(View.GONE);
    navigationView.addHeaderView(accountListView);
    SelectAccountsAdapter adapter = new SelectAccountsAdapter(this);
    adapter.setOnImageButtonClickListener(accessToken -> {
        drawer.closeDrawer(GravityCompat.START);
        if (accessToken.getUserId() != GlobalApplication.userId) {
            PreferenceManager.getDefaultSharedPreferences(this).edit().putString("AccountKey", accessToken.getKeyString()).apply();
            ((GlobalApplication) getApplication()).initTwitter(accessToken);
            updateDrawerImage();
            clearAndPrepareFragment();
        }
    });
    adapter.setOnAddButtonClickListener(v -> {
        PreferenceManager.getDefaultSharedPreferences(this).edit().putString("AccountKey", "-1").apply();
        GlobalApplication.twitter = null;
        startActivity(new Intent(this, OAuthActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK));
    });
    adapter.setOnRemoveButtonClickListener(v -> new AlertDialog.Builder(this).setMessage(R.string.confirm_logout).setCancelable(true).setPositiveButton(R.string.do_logout, (dialog, i) -> {
        SharedPreferences defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        TokenSQLiteOpenHelper helper = new TokenSQLiteOpenHelper(this);
        helper.deleteAccessToken(helper.getAccessToken(defaultSharedPreferences.getString("AccountKey", "-1")));
        int point = helper.getSize() - 1;
        if (point != -1) {
            AccessToken accessToken = helper.getAccessTokens()[point];
            defaultSharedPreferences.edit().putString("AccountKey", accessToken.getKeyString()).apply();
            ((GlobalApplication) getApplication()).initTwitter(accessToken);
            updateDrawerImage();
            clearAndPrepareFragment();
        } else {
            adapter.getOnAddButtonClickListener().onClick(v);
        }
        helper.close();
    }).setNeutralButton(R.string.back, (dialog, i) -> dialog.cancel()).show());
    accountListView.setAdapter(adapter);
    subscription.add(Single.create(singleSubscriber -> {
        TokenSQLiteOpenHelper helper = new TokenSQLiteOpenHelper(this);
        AccessToken[] accessTokens = helper.getAccessTokens();
        helper.close();
        ArrayList<Pair<User, AccessToken>> r = new ArrayList<>(accessTokens.length);
        for (AccessToken accessToken : accessTokens) {
            long id = accessToken.getUserId();
            CachedUsersSQLiteOpenHelper userHelper = new CachedUsersSQLiteOpenHelper(this, id, accessToken.getType() == Type.TWITTER);
            User user = userHelper.getCachedUser(id);
            if (user == null) {
                try {
                    user = ((GlobalApplication) getApplication()).getTwitterInstance(accessToken).verifyCredentials();
                    userHelper.addCachedUser(user);
                } catch (TwitterException e) {
                    singleSubscriber.onError(e);
                    return;
                } finally {
                    userHelper.close();
                }
            }
            r.add(new Pair<>(user, accessToken));
        }
        singleSubscriber.onSuccess(r);
    }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(o -> {
        ArrayList<Pair<User, AccessToken>> pairs = (ArrayList<Pair<User, AccessToken>>) o;
        adapter.getImagesList().addAll(pairs);
        adapter.notifyDataSetChanged();
    }, Throwable::printStackTrace));
    findViewById(R.id.fab).setOnClickListener(v -> startActivity(new Intent(this, PostActivity.class)));
    tabLayout = findViewById(R.id.toolbar_tab);
    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {

        @Override
        public void onTabSelected(TabLayout.Tab tab) {
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {
            Fragment fragment = ((FragmentPagerAdapter) ((UseTabsInterface) getMainFragment()).getTabsViewPager().getAdapter()).getFragment(tab.getPosition());
            if (fragment instanceof MovableTopInterface) {
                ((MovableTopInterface) fragment).moveToTop();
            }
        }
    });
    tweetListViewPool = new RecyclerView.RecycledViewPool();
    userListViewPool = new RecyclerView.RecycledViewPool();
    getSupportFragmentManager().addOnBackStackChangedListener(() -> attachFragment(getMainFragment()));
    if (savedInstanceState == null) {
        prepareFragment();
    }
}
Also used : NavigationView(android.support.design.widget.NavigationView) LinearLayout(android.widget.LinearLayout) Type(com.github.moko256.twicalico.entity.Type) Bundle(android.os.Bundle) ImageView(android.widget.ImageView) CachedUsersSQLiteOpenHelper(com.github.moko256.twicalico.database.CachedUsersSQLiteOpenHelper) AndroidSchedulers(rx.android.schedulers.AndroidSchedulers) Intent(android.content.Intent) NonNull(android.support.annotation.NonNull) TwitterStringUtils(com.github.moko256.twicalico.text.TwitterStringUtils) MenuItem(android.view.MenuItem) ArrayList(java.util.ArrayList) TabLayout(android.support.design.widget.TabLayout) GravityCompat(android.support.v4.view.GravityCompat) Single(rx.Single) Menu(android.view.Menu) Schedulers(rx.schedulers.Schedulers) User(twitter4j.User) View(android.view.View) TwitterException(twitter4j.TwitterException) PreferenceManager(android.preference.PreferenceManager) DrawerLayout(android.support.v4.widget.DrawerLayout) AccessToken(com.github.moko256.twicalico.entity.AccessToken) Fragment(android.support.v4.app.Fragment) ActivityOptionsCompat(android.support.v4.app.ActivityOptionsCompat) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) AppCompatActivity(android.support.v7.app.AppCompatActivity) ViewGroup(android.view.ViewGroup) CompositeSubscription(rx.subscriptions.CompositeSubscription) RecyclerView(android.support.v7.widget.RecyclerView) FragmentManager(android.support.v4.app.FragmentManager) AlertDialog(android.support.v7.app.AlertDialog) TextView(android.widget.TextView) SharedPreferences(android.content.SharedPreferences) Toolbar(android.support.v7.widget.Toolbar) Pair(android.support.v4.util.Pair) TokenSQLiteOpenHelper(com.github.moko256.twicalico.database.TokenSQLiteOpenHelper) FragmentPagerAdapter(com.github.moko256.twicalico.widget.FragmentPagerAdapter) ActionBarDrawerToggle(android.support.v7.app.ActionBarDrawerToggle) User(twitter4j.User) ActionBarDrawerToggle(android.support.v7.app.ActionBarDrawerToggle) ArrayList(java.util.ArrayList) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) Fragment(android.support.v4.app.Fragment) AccessToken(com.github.moko256.twicalico.entity.AccessToken) TabLayout(android.support.design.widget.TabLayout) DrawerLayout(android.support.v4.widget.DrawerLayout) TwitterException(twitter4j.TwitterException) TokenSQLiteOpenHelper(com.github.moko256.twicalico.database.TokenSQLiteOpenHelper) Pair(android.support.v4.util.Pair) SharedPreferences(android.content.SharedPreferences) CachedUsersSQLiteOpenHelper(com.github.moko256.twicalico.database.CachedUsersSQLiteOpenHelper) Intent(android.content.Intent) NavigationView(android.support.design.widget.NavigationView) ImageView(android.widget.ImageView) View(android.view.View) RecyclerView(android.support.v7.widget.RecyclerView) TextView(android.widget.TextView) CompositeSubscription(rx.subscriptions.CompositeSubscription) RecyclerView(android.support.v7.widget.RecyclerView) LinearLayout(android.widget.LinearLayout)

Example 3 with User

use of com.github.moko256.latte.client.base.entity.User in project twicalico by moko256.

the class TwitterStringUtils method getLinkedSequence.

public static CharSequence getLinkedSequence(AccessToken accessToken, String text, Link[] links) {
    if (links == null) {
        return text;
    }
    SpannableString spannableString = new SpannableString(text);
    for (Link link : links) {
        Object span;
        final Uri uri = Uri.parse(link.getUrl());
        if (uri.getScheme() != null && uri.getHost() != null && uri.getScheme().equals("twitlatte")) {
            switch(uri.getHost()) {
                case "symbol":
                    span = new ClickableNoLineSpan() {

                        @Override
                        public void onClick(@NonNull View view) {
                            Context context = view.getContext();
                            context.startActivity(SearchResultActivity.getIntent(context, "$" + uri.getLastPathSegment()));
                        }
                    };
                    break;
                case "hashtag":
                    span = new ClickableNoLineSpan() {

                        @Override
                        public void onClick(@NonNull View view) {
                            Context context = view.getContext();
                            context.startActivity(SearchResultActivity.getIntent(context, "#" + uri.getLastPathSegment()));
                        }
                    };
                    break;
                case "user":
                    String name = uri.getLastPathSegment();
                    if (name != null) {
                        if (name.split("@")[0].equals(accessToken.getScreenName())) {
                            span = new ClickableBoldSpan() {

                                @Override
                                public void onClick(@NonNull View view) {
                                    Context context = view.getContext();
                                    context.startActivity(ShowUserActivity.getIntent(context, name));
                                }
                            };
                        } else {
                            span = new ClickableNoLineSpan() {

                                @Override
                                public void onClick(@NonNull View view) {
                                    Context context = view.getContext();
                                    context.startActivity(ShowUserActivity.getIntent(context, name));
                                }
                            };
                        }
                    } else {
                        span = null;
                    }
                    break;
                default:
                    span = new ClickableNoLineSpan() {

                        @Override
                        public void onClick(@NonNull View view) {
                            Context context = view.getContext();
                            context.startActivity(SearchResultActivity.getIntent(context, uri.getLastPathSegment()));
                        }
                    };
                    break;
            }
        } else {
            span = new ClickableNoLineSpan() {

                @Override
                public void onClick(@NonNull View view) {
                    Context context = view.getContext();
                    AppCustomTabsKt.launchChromeCustomTabs(context, uri, false);
                }
            };
        }
        int nowLength = text.length();
        int start = link.getStart();
        int end = link.getEnd();
        if (start < end && end <= nowLength) {
            spannableString.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
    }
    return spannableString;
}
Also used : SpannableString(android.text.SpannableString) Context(android.content.Context) ClickableBoldSpan(com.github.moko256.twitlatte.text.style.ClickableBoldSpan) ClickableNoLineSpan(com.github.moko256.twitlatte.text.style.ClickableNoLineSpan) SpannableString(android.text.SpannableString) Uri(android.net.Uri) View(android.view.View) TextView(android.widget.TextView) Link(com.github.moko256.latte.html.entity.Link)

Example 4 with User

use of com.github.moko256.latte.client.base.entity.User in project twicalico by moko256.

the class ShowUserActivity method getShareUrl.

private String getShareUrl() {
    String url;
    User user = viewModel.getUser().getValue();
    if (user == null) {
        return "";
    }
    if (client.getAccessToken().getClientType() == CLIENT_TYPE_MASTODON) {
        String baseUrl;
        String userName;
        if (user.getScreenName().matches(".*@.*")) {
            String[] split = user.getScreenName().split("@");
            baseUrl = split[1];
            userName = split[0];
        } else {
            baseUrl = client.getAccessToken().getUrl();
            userName = user.getScreenName();
        }
        url = "https://" + baseUrl + "/@" + userName;
    } else {
        url = "https://twitter.com/" + user.getScreenName();
    }
    return url;
}
Also used : User(com.github.moko256.latte.client.base.entity.User)

Example 5 with User

use of com.github.moko256.latte.client.base.entity.User in project twicalico by moko256.

the class CachedUsersSQLiteOpenHelperTest method addCacheTest.

private void addCacheTest() {
    helper.addCachedUser(generateUser(TEST_DUMMY_USER_ID_1, TEST_DUMMY_USER_NAME_0));
    User addedStatusResult = helper.getCachedUser(TEST_DUMMY_USER_ID_1);
    assertEquals(addedStatusResult.getName(), TEST_DUMMY_USER_NAME_0);
}
Also used : User(com.github.moko256.latte.client.base.entity.User)

Aggregations

User (com.github.moko256.latte.client.base.entity.User)7 View (android.view.View)6 TextView (android.widget.TextView)6 Intent (android.content.Intent)5 Bundle (android.os.Bundle)5 Menu (android.view.Menu)5 MenuItem (android.view.MenuItem)5 ImageView (android.widget.ImageView)5 Emoji (com.github.moko256.latte.client.base.entity.Emoji)4 ArrayList (java.util.ArrayList)4 RecyclerView (androidx.recyclerview.widget.RecyclerView)3 EmojiToTextViewSetter (com.github.moko256.twitlatte.view.EmojiToTextViewSetter)3 Context (android.content.Context)2 SharedPreferences (android.content.SharedPreferences)2 PreferenceManager (android.preference.PreferenceManager)2 NonNull (android.support.annotation.NonNull)2 NavigationView (android.support.design.widget.NavigationView)2 TabLayout (android.support.design.widget.TabLayout)2 ActivityOptionsCompat (android.support.v4.app.ActivityOptionsCompat)2 Fragment (android.support.v4.app.Fragment)2