Search in sources :

Example 6 with Client

use of com.github.moko256.twitlatte.entity.Client in project twicalico by moko256.

the class StatusesAdapter method onBindViewHolder.

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, final int i) {
    if (viewHolder instanceof MoreLoadViewHolder) {
        ViewGroup.LayoutParams layoutParams = viewHolder.itemView.getLayoutParams();
        if (layoutParams instanceof StaggeredGridLayoutManager.LayoutParams) {
            ((StaggeredGridLayoutManager.LayoutParams) layoutParams).setFullSpan(true);
        }
        ((MoreLoadViewHolder) viewHolder).setIsLoading(false);
        viewHolder.itemView.setOnClickListener(v -> {
            ((MoreLoadViewHolder) viewHolder).setIsLoading(true);
            onLoadMoreClick.onClick(i);
        });
    } else {
        Post post = client.getPostCache().getPost(data.get(i));
        if (post != null) {
            if (viewHolder instanceof StatusViewHolder) {
                ((StatusViewHolder) viewHolder).setStatus(client, statusActionModel, glideRequests, post.getRepeatedUser(), post.getRepeat(), post.getUser(), post.getStatus(), post.getQuotedRepeatingUser(), post.getQuotedRepeatingStatus());
            } else if (viewHolder instanceof ImagesOnlyTweetViewHolder) {
                ((ImagesOnlyTweetViewHolder) viewHolder).setStatus(client, post.getStatus(), glideRequests);
            }
        }
    }
}
Also used : ViewGroup(android.view.ViewGroup) Post(com.github.moko256.latte.client.base.entity.Post)

Example 7 with Client

use of com.github.moko256.twitlatte.entity.Client in project twicalico by moko256.

the class MainActivity method onCreate.

@Override
public void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.MainActivityTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    disposable = new CompositeDisposable();
    client = GlobalApplicationKt.getClient(this);
    accountsModel = GlobalApplicationKt.getAccountsModel(this);
    Toolbar 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);
    if (drawer != null) {
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        toggle.setDrawerSlideAnimationEnabled(false);
        toggle.syncState();
        drawer.addDrawerListener(this);
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.color_primary_dark));
    }
    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.Companion.newInstance(client.getAccessToken().getUserId()));
                    break;
                case R.id.nav_lists:
                    replaceFragment(SelectListsEntriesFragment.Companion.newInstance(client.getAccessToken().getUserId()));
                    break;
                case R.id.nav_settings:
                    startActivity(new Intent(this, SettingsActivity.class));
                    break;
            }
        }
        if (drawer != null) {
            drawer.closeDrawer(GravityCompat.START);
        }
        return (id != R.id.nav_settings) && (id != R.id.nav_account);
    });
    View 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);
    userToggleImage = headerView.findViewById(R.id.toggle_account);
    userBackgroundImage = headerView.findViewById(R.id.user_bg_image);
    userBackgroundImage.setOnClickListener(v -> changeIsDrawerAccountsSelection());
    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);
    adapter = new SelectAccountsAdapter(this);
    adapter.onImageButtonClickListener = accessToken -> {
        if (accessToken.getUserId() != client.getAccessToken().getUserId()) {
            changeIsDrawerAccountsSelection();
            if (drawer != null) {
                drawer.closeDrawer(GravityCompat.START);
            }
            GlobalApplicationKt.preferenceRepository.putString(KEY_ACCOUNT_KEY, accessToken.getKeyString());
            ((GlobalApplication) getApplication()).initCurrentClient(accessToken);
            client = GlobalApplicationKt.getClient(this);
            adapter.updateSelectedPosition(accessToken);
            updateDrawerImage();
            clearAndPrepareFragment();
        }
    };
    adapter.onAddButtonClickListener = v -> startActivityForResult(new Intent(this, OAuthActivity.class), REQUEST_OAUTH);
    adapter.onRemoveButtonClickListener = v -> new AlertDialog.Builder(this).setMessage(R.string.confirm_logout).setCancelable(true).setPositiveButton(R.string.do_logout, (dialog, i) -> {
        AccessToken token = accountsModel.get(GlobalApplicationKt.preferenceRepository.getString(KEY_ACCOUNT_KEY, "-1"));
        accountsModel.delete(token);
        adapter.removeAccessTokensAndUpdate(token);
        int point = accountsModel.size() - 1;
        if (point != -1) {
            AccessToken accessToken = accountsModel.getAccessTokens().get(point);
            GlobalApplicationKt.preferenceRepository.putString(KEY_ACCOUNT_KEY, accessToken.getKeyString());
            ((GlobalApplication) getApplication()).initCurrentClient(accessToken);
            client = GlobalApplicationKt.getClient(this);
            adapter.updateSelectedPosition(accessToken);
            updateDrawerImage();
            updateAccountsList();
            clearAndPrepareFragment();
        } else {
            GlobalApplicationKt.preferenceRepository.putString(KEY_ACCOUNT_KEY, "-1");
            ((GlobalApplication) getApplication()).clearCurrentClient();
            startActivityForResult(new Intent(this, OAuthActivity.class), REQUEST_OAUTH);
        }
    }).setNegativeButton(android.R.string.cancel, null).show();
    accountListView.setAdapter(adapter);
    findViewById(R.id.fab).setOnClickListener(v -> startActivity(new Intent(this, PostActivity.class)));
    tabLayout = findViewById(R.id.toolbar_tab);
    tabLayout.addOnTabSelectedListener(this);
    alwaysCloseApp = GlobalApplicationKt.preferenceRepository.getBoolean(KEY_ALWAYS_CLOSE_APP, true);
    recycledViewPool = new RecyclerView.RecycledViewPool();
    recycledViewPool.setMaxRecycledViews(R.layout.layout_post_card, 16);
    getSupportFragmentManager().addOnBackStackChangedListener(() -> attachFragment(getMainFragment()));
    if (client == null) {
        startActivityForResult(new Intent(this, OAuthActivity.class), REQUEST_OAUTH);
    } else {
        updateDrawerImage();
        updateAccountsList();
        if (savedInstanceState == null) {
            prepareFragment();
        }
        if (client.getAccessToken().getToken().isEmpty()) {
            Toast.makeText(this, R.string.please_re_login, Toast.LENGTH_LONG).show();
        }
    }
}
Also used : LinearLayout(android.widget.LinearLayout) Bundle(android.os.Bundle) NonNull(androidx.annotation.NonNull) ImageView(android.widget.ImageView) AccountsModel(com.github.moko256.twitlatte.model.AccountsModel) AppCompatActivity(androidx.appcompat.app.AppCompatActivity) AndroidSchedulers(io.reactivex.android.schedulers.AndroidSchedulers) DrawableTransitionOptions(com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions) ActivityOptionsCompat(androidx.core.app.ActivityOptionsCompat) RequestManager(com.bumptech.glide.RequestManager) ActionBarDrawerToggle(androidx.appcompat.app.ActionBarDrawerToggle) Fragment(androidx.fragment.app.Fragment) View(android.view.View) ListEntry(com.github.moko256.latte.client.base.entity.ListEntry) EmojiToTextViewSetter(com.github.moko256.twitlatte.view.EmojiToTextViewSetter) Schedulers(io.reactivex.schedulers.Schedulers) RecyclerView(androidx.recyclerview.widget.RecyclerView) ContextCompat(androidx.core.content.ContextCompat) MediaUrlConverter(com.github.moko256.latte.client.base.MediaUrlConverter) TabLayout(com.google.android.material.tabs.TabLayout) ViewGroup(android.view.ViewGroup) Objects(java.util.Objects) DpToPxKt(com.github.moko256.twitlatte.view.DpToPxKt) List(java.util.List) CompositeDisposable(io.reactivex.disposables.CompositeDisposable) TextView(android.widget.TextView) Nullable(androidx.annotation.Nullable) KEY_ALWAYS_CLOSE_APP(com.github.moko256.twitlatte.repository.PreferenceRepositoryKt.KEY_ALWAYS_CLOSE_APP) Toolbar(androidx.appcompat.widget.Toolbar) Emoji(com.github.moko256.latte.client.base.entity.Emoji) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) DrawerLayout(androidx.drawerlayout.widget.DrawerLayout) KeyEvent(android.view.KeyEvent) AlertDialog(androidx.appcompat.app.AlertDialog) NavigationView(com.google.android.material.navigation.NavigationView) User(com.github.moko256.latte.client.base.entity.User) Pair(android.util.Pair) Intent(android.content.Intent) Single(io.reactivex.Single) MenuItem(android.view.MenuItem) ArrayList(java.util.ArrayList) TwitterStringUtils(com.github.moko256.twitlatte.text.TwitterStringUtils) Toast(android.widget.Toast) Menu(android.view.Menu) Build(android.os.Build) FragmentManager(androidx.fragment.app.FragmentManager) GravityCompat(androidx.core.view.GravityCompat) Client(com.github.moko256.twitlatte.entity.Client) VerifyCredentialOnSubscribe(com.github.moko256.twitlatte.rx.VerifyCredentialOnSubscribe) KEY_ACCOUNT_KEY(com.github.moko256.twitlatte.repository.PreferenceRepositoryKt.KEY_ACCOUNT_KEY) CachedUsersSQLiteOpenHelper(com.github.moko256.twitlatte.database.CachedUsersSQLiteOpenHelper) AccessToken(com.github.moko256.latte.client.base.entity.AccessToken) Glide(com.bumptech.glide.Glide) FragmentPagerAdapter(com.github.moko256.twitlatte.widget.FragmentPagerAdapter) ActionBarDrawerToggle(androidx.appcompat.app.ActionBarDrawerToggle) Intent(android.content.Intent) LinearLayoutManager(androidx.recyclerview.widget.LinearLayoutManager) Fragment(androidx.fragment.app.Fragment) ImageView(android.widget.ImageView) View(android.view.View) RecyclerView(androidx.recyclerview.widget.RecyclerView) TextView(android.widget.TextView) NavigationView(com.google.android.material.navigation.NavigationView) AccessToken(com.github.moko256.latte.client.base.entity.AccessToken) RecyclerView(androidx.recyclerview.widget.RecyclerView) CompositeDisposable(io.reactivex.disposables.CompositeDisposable) LinearLayout(android.widget.LinearLayout) Toolbar(androidx.appcompat.widget.Toolbar)

Aggregations

Intent (android.content.Intent)4 Bundle (android.os.Bundle)4 Menu (android.view.Menu)4 MenuItem (android.view.MenuItem)4 View (android.view.View)4 TextView (android.widget.TextView)4 AppCompatActivity (androidx.appcompat.app.AppCompatActivity)4 Glide (com.bumptech.glide.Glide)4 RequestManager (com.bumptech.glide.RequestManager)4 Client (com.github.moko256.twitlatte.entity.Client)4 CompositeDisposable (io.reactivex.disposables.CompositeDisposable)4 SuppressLint (android.annotation.SuppressLint)3 ClipData (android.content.ClipData)3 Context (android.content.Context)3 Toast (android.widget.Toast)3 ActionBar (androidx.appcompat.app.ActionBar)3 ActivityOptionsCompat (androidx.core.app.ActivityOptionsCompat)3 RecyclerView (androidx.recyclerview.widget.RecyclerView)3 Post (com.github.moko256.latte.client.base.entity.Post)3 TwitterStringUtils (com.github.moko256.twitlatte.text.TwitterStringUtils)3