Skip to content
This repository has been archived by the owner on Sep 30, 2021. It is now read-only.

Commit

Permalink
switching branches and caching them to close #52
Browse files Browse the repository at this point in the history
  • Loading branch information
Kosh committed Mar 3, 2017
1 parent 4900381 commit 75b5382
Show file tree
Hide file tree
Showing 10 changed files with 297 additions and 154 deletions.
30 changes: 30 additions & 0 deletions app/src/main/java/com/fastaccess/data/dao/RepoPathsManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.fastaccess.data.dao;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

import java.util.ArrayList;
import java.util.HashMap;

import lombok.NoArgsConstructor;

/**
* Created by Kosh on 03 Mar 2017, 10:43 PM
*/

@NoArgsConstructor
public class RepoPathsManager {
private HashMap<String, ArrayList<RepoFilesModel>> files = new HashMap<>();

@Nullable public ArrayList<RepoFilesModel> getPaths(@NonNull String url, @NonNull String ref) {
return files.get(ref + "/" + url);
}

public void setFiles(@NonNull String ref, @NonNull String path, @NonNull ArrayList<RepoFilesModel> paths) {
files.put(ref + "/" + path, paths);
}

public void clear() {
files.clear();
}
}
42 changes: 0 additions & 42 deletions app/src/main/java/com/fastaccess/data/dao/RepoPathsModel.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,9 @@ interface View extends BaseMvp.FAView, SwipeRefreshLayout.OnRefreshListener {

void onMenuClicked(@NonNull RepoFilesModel model, android.view.View view);

void onSetData(@NonNull String login, @NonNull String repoId, @NonNull String path, @NonNull String ref);
void onSetData(@NonNull String login, @NonNull String repoId, @NonNull String path, @NonNull String ref, boolean clear);

boolean isRefreshing();

void onForceRefresh(@NonNull String login, @NonNull String repoId, @NonNull String path, @NonNull String ref);
}

interface Presenter extends BaseMvp.FAPresenter,
Expand All @@ -39,7 +37,7 @@ interface Presenter extends BaseMvp.FAPresenter,

void onCallApi();

void onInitDataAndRequest(@NonNull String login, @NonNull String repoId, @NonNull String path, @NonNull String ref);
void onInitDataAndRequest(@NonNull String login, @NonNull String repoId, @NonNull String path, @NonNull String ref, boolean clear);

@Nullable ArrayList<RepoFilesModel> getCachedFiles(@NonNull String url, @NonNull String ref);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,15 @@
import android.support.annotation.Nullable;
import android.view.View;

import com.annimon.stream.Objects;
import com.annimon.stream.Stream;
import com.fastaccess.R;
import com.fastaccess.data.dao.RepoFilesModel;
import com.fastaccess.data.dao.RepoPathsManager;
import com.fastaccess.data.dao.types.FilesType;
import com.fastaccess.provider.rest.RestProvider;
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;

import rx.Observable;

Expand All @@ -24,7 +22,7 @@

class RepoFilesPresenter extends BasePresenter<RepoFilesMvp.View> implements RepoFilesMvp.Presenter {
private ArrayList<RepoFilesModel> files = new ArrayList<>();
private HashMap<String, HashMap<String, ArrayList<RepoFilesModel>>> cachedFiles = new LinkedHashMap<>();
private RepoPathsManager pathsModel = new RepoPathsManager();
private String repoId;
private String login;
private String path;
Expand Down Expand Up @@ -71,38 +69,31 @@ class RepoFilesPresenter extends BasePresenter<RepoFilesMvp.View> implements Rep
.sortBy(model -> model.getType() == FilesType.file)
.collect(com.annimon.stream.Collectors.toCollection(ArrayList::new));
manageSubscription(RepoFilesModel.save(repoFilesModels, login, repoId).subscribe());
if (getCachedFiles(path, ref) == null) {
cachedFiles.put(ref, new HashMap<String, ArrayList<RepoFilesModel>>() {{put(path, repoFilesModels);}});
}
pathsModel.setFiles(ref, path, repoFilesModels);
files.addAll(repoFilesModels);
sendToView(RepoFilesMvp.View::onNotifyAdapter);
});

}

@Override public void onInitDataAndRequest(@NonNull String login, @NonNull String repoId, @NonNull String path, @NonNull String ref) {
@Override public void onInitDataAndRequest(@NonNull String login, @NonNull String repoId, @NonNull String path,
@NonNull String ref, boolean clear) {
if (clear) pathsModel.clear();
this.login = login;
this.repoId = repoId;
this.ref = ref;
this.path = path;
ArrayList<RepoFilesModel> cachedFiles = getCachedFiles(path, ref);
if (cachedFiles != null && !cachedFiles.isEmpty()) {
files.clear();
files.addAll(cachedFiles);
sendToView(RepoFilesMvp.View::onNotifyAdapter);
} else {
this.login = login;
this.repoId = repoId;
if (!Objects.toString(ref, "").equalsIgnoreCase(this.ref) || !Objects.toString(path, "").equalsIgnoreCase(this.path)) {
this.path = Objects.toString(path, "");
this.ref = ref;
onCallApi();
}
onCallApi();
}
}

@Nullable @Override public ArrayList<RepoFilesModel> getCachedFiles(@NonNull String url, @NonNull String ref) {
HashMap<String, ArrayList<RepoFilesModel>> map = cachedFiles.get(ref);
if (map != null) {
ArrayList<RepoFilesModel> models = map.get(url);
if (models != null && !models.isEmpty()) return models;
}
return null;
return pathsModel.getPaths(url, ref);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,18 +87,14 @@ public class RepoFilesView extends BaseFragment<RepoFilesMvp.View, RepoFilesPres
popup.show();
}

@Override public void onSetData(@NonNull String login, @NonNull String repoId, @NonNull String path, @NonNull String ref) {
getPresenter().onInitDataAndRequest(login, repoId, path, ref);
@Override public void onSetData(@NonNull String login, @NonNull String repoId, @NonNull String path, @NonNull String ref, boolean clear) {
getPresenter().onInitDataAndRequest(login, repoId, path, ref, clear);
}

@Override public boolean isRefreshing() {
return refresh.isRefreshing();
}

@Override public void onForceRefresh(@NonNull String login, @NonNull String repoId, @NonNull String path, @NonNull String ref) {

}

@Override protected int fragmentLayout() {
return R.layout.vertical_refresh_list;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,14 +61,14 @@ public static RepoFilePathView newInstance(@NonNull String login, @NonNull Strin
if (adapter.getItemCount() > 0) {
getPresenter().getPaths().clear();
onNotifyAdapter();
getRepoFilesView().onSetData(getPresenter().getLogin(), getPresenter().getRepoId(), "", ref);
getRepoFilesView().onSetData(getPresenter().getLogin(), getPresenter().getRepoId(), "", ref, false);
}
}

@OnItemSelected(R.id.branches) void onBranchSelected(int position) {
if (repoCallback.hasUserInteractedWithView()) {
ref = ((BranchesModel) branches.getItemAtPosition(position)).getName();
getRepoFilesView().onSetData(getPresenter().getLogin(), getPresenter().getRepoId(), "", ref);
getRepoFilesView().onSetData(getPresenter().getLogin(), getPresenter().getRepoId(), "", ref, true);
onBackClicked();
}
}
Expand All @@ -93,21 +93,22 @@ public static RepoFilePathView newInstance(@NonNull String login, @NonNull Strin

@Override public void onItemClicked(@NonNull RepoFilesModel model, int position) {
if (getRepoFilesView().isRefreshing()) return;
getRepoFilesView().onSetData(getPresenter().getLogin(), getPresenter().getRepoId(), Objects.toString(model.getPath(), ""), ref, false);
if ((position + 1) < adapter.getItemCount()) {
adapter.subList(position + 1, adapter.getItemCount());
}
getRepoFilesView().onSetData(getPresenter().getLogin(), getPresenter().getRepoId(), Objects.toString(model.getPath(), ""), ref);

recycler.scrollToPosition(adapter.getItemCount() - 1);
}

@Override public void onAppendPath(@NonNull RepoFilesModel model) {
adapter.addItem(model);
recycler.scrollToPosition(adapter.getItemCount() - 1); //smoothScrollToPosition(index) hides the recyclerview? MIND-BLOWING??.
getRepoFilesView().onSetData(getPresenter().getLogin(), getPresenter().getRepoId(), Objects.toString(model.getPath(), ""), ref);
getRepoFilesView().onSetData(getPresenter().getLogin(), getPresenter().getRepoId(), Objects.toString(model.getPath(), ""), ref, false);
}

@Override public void onSendData() {
getRepoFilesView().onSetData(getPresenter().getLogin(), getPresenter().getRepoId(), Objects.toString(getPresenter().getPath(), ""), ref);
getRepoFilesView().onSetData(getPresenter().getLogin(), getPresenter().getRepoId(),
Objects.toString(getPresenter().getPath(), ""), ref, false);
}

@Override public boolean canPressBack() {
Expand Down Expand Up @@ -140,7 +141,9 @@ public static RepoFilePathView newInstance(@NonNull String login, @NonNull Strin
}

@Override public void setBranchesData(@NonNull List<BranchesModel> branchesData) {
branches.setAdapter(new ArrayAdapter<>(getContext(), android.R.layout.simple_dropdown_item_1line, branchesData));
ArrayAdapter<BranchesModel> adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_item, branchesData);
adapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
branches.setAdapter(adapter);
}

@Override protected int fragmentLayout() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/universal_primary_dark_color"
android:orientation="horizontal"
android:paddingBottom="@dimen/spacing_micro"
android:paddingEnd="@dimen/spacing_xs_large"
android:paddingStart="@dimen/spacing_xs_large"
android:paddingTop="@dimen/spacing_micro"
tools:showIn="@layout/repo_file_layout">

<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:orientation="horizontal">

<com.fastaccess.ui.widgets.ForegroundImageView
android:id="@+id/toParentFolder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/switch_branch"
android:padding="@dimen/spacing_normal"
android:src="@drawable/ic_home"/>

<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="@dimen/spacing_xs_large"
android:orientation="horizontal"
app:layoutManager="@string/linear_layout_manager"
tools:listitem="@layout/file_path_row_item"/>
</LinearLayout>

<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.6"
android:background="@drawable/left_border"
android:clickable="true"
android:orientation="horizontal">

<com.fastaccess.ui.widgets.ForegroundImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/switch_branch"
android:padding="@dimen/spacing_normal"
android:src="@drawable/ic_branch"/>

<android.support.v7.widget.AppCompatSpinner
android:id="@+id/branches"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginEnd="@dimen/spacing_xs_large"
android:layout_marginStart="@dimen/spacing_xs_large"
android:layout_weight="1"
android:spinnerMode="dialog"
app:backgroundTint="?colorAccent"
tools:entries="@array/notification_types"/>

<ProgressBar
android:id="@+id/branchesProgress"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center"
android:visibility="gone"/>


</LinearLayout>

</LinearLayout>

0 comments on commit 75b5382

Please sign in to comment.