preparing for gist editing.

This commit is contained in:
Kosh Sergani 2017-08-10 17:35:19 +08:00
parent e16732d63c
commit 0e69d13ff7
31 changed files with 292 additions and 138 deletions

View File

@ -166,12 +166,12 @@ dependencies {
implementation 'com.apollographql.apollo:apollo-rx2-support:0.4.0'
implementation 'com.jaredrummler:android-device-names:1.1.4'
compileOnly "org.projectlombok:lombok:${lombokVersion}"
kapt "io.requery:requery-processor:${requery}"
kapt "org.projectlombok:lombok:${lombokVersion}"
kapt "com.evernote:android-state-processor:${state_version}"
kapt "com.jakewharton:butterknife-compiler:${butterKnifeVersion}"
kapt 'com.github.matthiasrobbers:shortbread-compiler:1.0.1'
kapt "org.projectlombok:lombok:${lombokVersion}"
kapt "io.requery:requery-processor:${requery}"
// testImplementation "net.grandcentrix.thirtyinch:thirtyinch-test:$thirtyinchVersion"
testImplementation "junit:junit:${junitVersion}"
testImplementation "org.mockito:mockito-core:${mockitoVersion}"

View File

@ -19,23 +19,23 @@ import lombok.Setter;
public class CreateGistModel implements Parcelable {
private HashMap<String, FilesListModel> files;
private String description;
@SerializedName("public") private boolean publicGist;
@SerializedName("public") private Boolean publicGist;
@Override public int describeContents() { return 0; }
@Override public void writeToParcel(Parcel dest, int flags) {
dest.writeSerializable(this.files);
dest.writeString(this.description);
dest.writeByte(this.publicGist ? (byte) 1 : (byte) 0);
dest.writeValue(this.publicGist);
}
@SuppressWarnings({"WeakerAccess", "unchecked"}) protected CreateGistModel(Parcel in) {
@SuppressWarnings("unchecked") private CreateGistModel(Parcel in) {
this.files = (HashMap<String, FilesListModel>) in.readSerializable();
this.description = in.readString();
this.publicGist = in.readByte() != 0;
this.publicGist = (Boolean) in.readValue(Boolean.class.getClassLoader());
}
public static final Parcelable.Creator<CreateGistModel> CREATOR = new Parcelable.Creator<CreateGistModel>() {
public static final Creator<CreateGistModel> CREATOR = new Creator<CreateGistModel>() {
@Override public CreateGistModel createFromParcel(Parcel source) {return new CreateGistModel(source);}
@Override public CreateGistModel[] newArray(int size) {return new CreateGistModel[size];}

View File

@ -18,9 +18,9 @@ public class FilesListModel implements Parcelable, Serializable {
private String filename;
private String type;
private String rawUrl;
private long size;
private Long size;
private String content;
private boolean needFetching;
private Boolean needFetching;
private String language;
@Override public int describeContents() { return 0; }
@ -29,19 +29,19 @@ public class FilesListModel implements Parcelable, Serializable {
dest.writeString(this.filename);
dest.writeString(this.type);
dest.writeString(this.rawUrl);
dest.writeLong(this.size);
dest.writeValue(this.size);
dest.writeString(this.content);
dest.writeByte(this.needFetching ? (byte) 1 : (byte) 0);
dest.writeValue(this.needFetching);
dest.writeString(this.language);
}
private FilesListModel(Parcel in) {
protected FilesListModel(Parcel in) {
this.filename = in.readString();
this.type = in.readString();
this.rawUrl = in.readString();
this.size = in.readLong();
this.size = (Long) in.readValue(Long.class.getClassLoader());
this.content = in.readString();
this.needFetching = in.readByte() != 0;
this.needFetching = (Boolean) in.readValue(Boolean.class.getClassLoader());
this.language = in.readString();
}

View File

@ -151,9 +151,9 @@ import lombok.Setter;
.collect(Collectors.toList());
}
@NonNull public static List<FragmentPagerAdapterModel> buildForGist(@NonNull Context context, @NonNull Gist gistsModel) {
@NonNull public static List<FragmentPagerAdapterModel> buildForGist(@NonNull Context context, @NonNull Gist gistsModel, boolean isOwner) {
return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.files), GistFilesListFragment.newInstance(gistsModel.getFiles())),
return Stream.of(new FragmentPagerAdapterModel(context.getString(R.string.files), GistFilesListFragment.newInstance(gistsModel.getFiles(), isOwner)),
new FragmentPagerAdapterModel(context.getString(R.string.comments), GistCommentsFragment.newInstance(gistsModel.getGistId())))
.collect(Collectors.toList());
}

View File

@ -32,7 +32,7 @@ public interface GistService {
@POST("gists") Observable<Gist> createGist(@Body CreateGistModel gistBody);
@POST("gists/{id}") Observable<Gist> editGist(@Body CreateGistModel gistBody, @NonNull @Path("id") String id);
@PATCH("gists/{id}") Observable<Gist> editGist(@Body CreateGistModel gistBody, @NonNull @Path("id") String id);
@DELETE("gists/{id}") Observable<Response<Boolean>> deleteGist(@Path("id") String id);

View File

@ -17,13 +17,16 @@ import java.util.List;
public class GistFilesAdapter extends BaseRecyclerAdapter<FilesListModel, GistFilesViewHolder, BaseViewHolder
.OnItemClickListener<FilesListModel>> {
private boolean isOwner;
public GistFilesAdapter(@NonNull List<FilesListModel> data, @Nullable BaseViewHolder.OnItemClickListener<FilesListModel> listener) {
public GistFilesAdapter(@NonNull List<FilesListModel> data, @Nullable BaseViewHolder.OnItemClickListener<FilesListModel> listener,
boolean isOwner) {
super(data, listener);
this.isOwner = isOwner;
}
@Override protected GistFilesViewHolder viewHolder(ViewGroup parent, int viewType) {
return GistFilesViewHolder.newInstance(parent, this);
return GistFilesViewHolder.newInstance(parent, this, isOwner);
}
@Override protected void onBindView(GistFilesViewHolder holder, int position) {

View File

@ -13,6 +13,7 @@ import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder
class TrendingAdapter(data: MutableList<TrendingModel>) : BaseRecyclerAdapter<TrendingModel,
TrendingViewHolder, BaseViewHolder.OnItemClickListener<TrendingModel>>(data) {
override fun viewHolder(parent: ViewGroup?, viewType: Int): TrendingViewHolder {
return TrendingViewHolder(BaseViewHolder.getView(parent!!, R.layout.trending_row_item), this)
}

View File

@ -9,6 +9,7 @@ import com.fastaccess.R;
import com.fastaccess.data.dao.FilesListModel;
import com.fastaccess.ui.adapter.GistFilesAdapter;
import com.fastaccess.ui.widgets.FontTextView;
import com.fastaccess.ui.widgets.ForegroundImageView;
import com.fastaccess.ui.widgets.SpannableBuilder;
import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder;
@ -20,23 +21,32 @@ import butterknife.BindView;
public class GistFilesViewHolder extends BaseViewHolder<FilesListModel> {
@BindView(R.id.fileName) FontTextView fileName;
@BindView(R.id.language) FontTextView language;
@BindView(R.id.size) FontTextView size;
@BindView(R.id.delete) ForegroundImageView delete;
@BindView(R.id.edit) ForegroundImageView edit;
private boolean isOwner;
private GistFilesViewHolder(@NonNull View itemView, GistFilesAdapter adapter) {
private GistFilesViewHolder(@NonNull View itemView, GistFilesAdapter adapter, boolean isOwner) {
super(itemView, adapter);
this.isOwner = isOwner;
if (isOwner) {
delete.setOnClickListener(this);
edit.setOnClickListener(this);
}
}
public static GistFilesViewHolder newInstance(@NonNull ViewGroup parent, GistFilesAdapter adapter) {
return new GistFilesViewHolder(getView(parent, R.layout.gist_files_row_item), adapter);
public static GistFilesViewHolder newInstance(@NonNull ViewGroup parent, GistFilesAdapter adapter, boolean isOwner) {
return new GistFilesViewHolder(getView(parent, R.layout.gist_files_row_item), adapter, isOwner);
}
@Override public void bind(@NonNull FilesListModel filesListModel) {
fileName.setText(filesListModel.getFilename());
language.setText(SpannableBuilder.builder().bold(filesListModel.getType()));
size.setText(Formatter.formatFileSize(size.getContext(), filesListModel.getSize()));
delete.setVisibility(isOwner ? View.VISIBLE : View.GONE);
edit.setVisibility(isOwner ? View.VISIBLE : View.GONE);
}
}

View File

@ -4,12 +4,11 @@ import android.annotation.SuppressLint
import android.net.Uri
import android.view.View
import android.view.ViewGroup
import butterknife.BindView
import com.fastaccess.R
import com.fastaccess.data.dao.model.Login
import com.fastaccess.ui.widgets.AvatarLayout
import com.fastaccess.ui.widgets.FontTextView
import com.fastaccess.ui.widgets.bindOptionalView
import com.fastaccess.ui.widgets.bindView
import com.fastaccess.ui.widgets.recyclerview.BaseRecyclerAdapter
import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder
@ -19,8 +18,9 @@ import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder
class LoginViewHolder private constructor(itemView: View, adapter: BaseRecyclerAdapter<*, *, *>?) :
BaseViewHolder<Login>(itemView, adapter) {
private val avatarLayout: AvatarLayout? by bindOptionalView(R.id.avatarLayout)
private val title: FontTextView by bindView(R.id.title)
val avatarLayout: AvatarLayout? by lazy { itemView.findViewById<AvatarLayout>(R.id.avatarLayout) as AvatarLayout }
@BindView(R.id.title) lateinit var title: FontTextView
@SuppressLint("SetTextI18n")
override fun bind(login: Login) {

View File

@ -1,13 +1,13 @@
package com.fastaccess.ui.adapter.viewholder
import android.view.View
import butterknife.BindView
import com.fastaccess.R
import com.fastaccess.data.dao.TrendingModel
import com.fastaccess.helper.Logger
import com.fastaccess.provider.colors.ColorsProvider
import com.fastaccess.provider.emoji.EmojiParser
import com.fastaccess.ui.widgets.FontTextView
import com.fastaccess.ui.widgets.bindView
import com.fastaccess.ui.widgets.recyclerview.BaseRecyclerAdapter
import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder
@ -18,12 +18,13 @@ import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder
open class TrendingViewHolder(itemView: View, adapter: BaseRecyclerAdapter<TrendingModel,
TrendingViewHolder, OnItemClickListener<TrendingModel>>) : BaseViewHolder<TrendingModel>(itemView, adapter) {
private val title: FontTextView by bindView(R.id.title)
private val description: FontTextView by bindView(R.id.description)
private val todayStars: FontTextView by bindView(R.id.todayStars)
private val stars: FontTextView by bindView(R.id.stars)
private val fork: FontTextView by bindView(R.id.forks)
private val lang: FontTextView by bindView(R.id.language)
@BindView(R.id.title) lateinit var title: FontTextView
@BindView(R.id.description) lateinit var description: FontTextView
@BindView(R.id.todayStars) lateinit var todayStars: FontTextView
@BindView(R.id.stars) lateinit var stars: FontTextView
@BindView(R.id.forks) lateinit var fork: FontTextView
@BindView(R.id.language) lateinit var lang: FontTextView
override fun bind(t: TrendingModel) {
title.text = t.title

View File

@ -15,8 +15,10 @@ import android.view.MenuItem;
import android.view.View;
import com.fastaccess.R;
import com.fastaccess.data.dao.FilesListModel;
import com.fastaccess.data.dao.FragmentPagerAdapterModel;
import com.fastaccess.data.dao.model.Gist;
import com.fastaccess.data.dao.model.Login;
import com.fastaccess.helper.ActivityHelper;
import com.fastaccess.helper.BundleConstant;
import com.fastaccess.helper.Bundler;
@ -35,6 +37,8 @@ import com.fastaccess.ui.widgets.ForegroundImageView;
import com.fastaccess.ui.widgets.ViewPagerView;
import com.fastaccess.ui.widgets.dialog.MessageDialogView;
import java.util.List;
import butterknife.BindView;
import butterknife.OnClick;
@ -220,7 +224,8 @@ public class GistActivity extends BaseActivity<GistMvp.View, GistPresenter>
date.setText(ParseDateFormat.getTimeAgo(gistsModel.getCreatedAt()));
}
size.setText(Formatter.formatFileSize(this, gistsModel.getSize()));
pager.setAdapter(new FragmentsPagerAdapter(getSupportFragmentManager(), FragmentPagerAdapterModel.buildForGist(this, gistsModel)));
pager.setAdapter(new FragmentsPagerAdapter(getSupportFragmentManager(), FragmentPagerAdapterModel.buildForGist(this, gistsModel
, Login.getUser().getLogin().equalsIgnoreCase(login))));
tabs.setupWithViewPager(pager);
pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override public void onPageSelected(int position) {
@ -248,11 +253,16 @@ public class GistActivity extends BaseActivity<GistMvp.View, GistPresenter>
}
}
@Override public void onUpdateGist(@NonNull List<FilesListModel> files, @NonNull String filename) {
getPresenter().onUpdateGist(files, filename);
}
private void hideShowFab() {
if (pager.getCurrentItem() == 1) {
fab.show();
fab.setImageResource(R.drawable.ic_comment);
} else {
fab.hide();
fab.setImageResource(R.drawable.ic_add);
}
fab.show();
}
}

View File

@ -4,8 +4,12 @@ import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.fastaccess.data.dao.FilesListModel;
import com.fastaccess.data.dao.model.Gist;
import com.fastaccess.ui.base.mvp.BaseMvp;
import com.fastaccess.ui.modules.gists.gist.files.GistFilesListMvp;
import java.util.List;
/**
* Created by Kosh on 12 Nov 2016, 12:17 PM
@ -13,7 +17,7 @@ import com.fastaccess.ui.base.mvp.BaseMvp;
interface GistMvp {
interface View extends BaseMvp.FAView {
interface View extends BaseMvp.FAView, GistFilesListMvp.UpdateGistCallback {
void onSuccessDeleted();
void onErrorDeleting();
@ -48,5 +52,7 @@ interface GistMvp {
void checkStarring(@NonNull String gistId);
void onWorkOffline(@NonNull String gistId);
void onUpdateGist(@NonNull List<FilesListModel> files, String filename);
}
}

View File

@ -5,13 +5,21 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.annimon.stream.Collectors;
import com.annimon.stream.Stream;
import com.fastaccess.data.dao.CreateGistModel;
import com.fastaccess.data.dao.FilesListModel;
import com.fastaccess.data.dao.model.Gist;
import com.fastaccess.data.dao.model.Login;
import com.fastaccess.helper.BundleConstant;
import com.fastaccess.helper.Logger;
import com.fastaccess.helper.RxHelper;
import com.fastaccess.provider.rest.RestProvider;
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
import java.util.HashMap;
import java.util.List;
/**
* Created by Kosh on 12 Nov 2016, 12:17 PM
*/
@ -106,4 +114,27 @@ class GistPresenter extends BasePresenter<GistMvp.View> implements GistMvp.Prese
}));
}
}
@Override public void onUpdateGist(@NonNull List<FilesListModel> files, @NonNull String filename) {
CreateGistModel createGistModel = new CreateGistModel();
createGistModel.setDescription(gist.getDescription());
Logger.e(filename);
if (!files.isEmpty()) {
HashMap<String, FilesListModel> map = Stream.of(files)
.collect(Collectors.toMap(FilesListModel::getFilename, filesListModel -> filesListModel, HashMap::new));
map.put(filename, new FilesListModel());
createGistModel.setFiles(map);
} else {
HashMap<String, FilesListModel> map = new HashMap<>();
map.put(filename, new FilesListModel());
createGistModel.setFiles(map);
}
makeRestCall(RestProvider.getGistService(isEnterprise()).editGist(createGistModel, gistId),
gist1 -> {
if (gist1 != null) {
gist = gist1;
sendToView(GistMvp.View::onSetupDetails);
}
});
}
}

View File

@ -1,5 +1,6 @@
package com.fastaccess.ui.modules.gists.gist.files;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@ -19,6 +20,7 @@ import com.fastaccess.provider.rest.RestProvider;
import com.fastaccess.ui.adapter.GistFilesAdapter;
import com.fastaccess.ui.base.BaseFragment;
import com.fastaccess.ui.modules.code.CodeViewerActivity;
import com.fastaccess.ui.modules.gists.gist.files.GistFilesListMvp.UpdateGistCallback;
import com.fastaccess.ui.widgets.StateLayout;
import com.fastaccess.ui.widgets.dialog.MessageDialogView;
import com.fastaccess.ui.widgets.recyclerview.DynamicRecyclerView;
@ -39,15 +41,32 @@ public class GistFilesListFragment extends BaseFragment<GistFilesListMvp.View, G
@BindView(R.id.refresh) SwipeRefreshLayout refresh;
@BindView(R.id.stateLayout) StateLayout stateLayout;
@BindView(R.id.fastScroller) RecyclerViewFastScroller fastScroller;
private GistFilesAdapter adapter;
private UpdateGistCallback updateGistCallback;
public static GistFilesListFragment newInstance(@NonNull GithubFileModel gistsModel) {
public static GistFilesListFragment newInstance(@NonNull GithubFileModel gistsModel, boolean isOwner) {
GistFilesListFragment view = new GistFilesListFragment();
view.setArguments(Bundler.start()
.putParcelableArrayList(BundleConstant.ITEM, new ArrayList<>(gistsModel.values()))
.put(BundleConstant.EXTRA_TYPE, isOwner)
.end());
return view;
}
@Override public void onAttach(Context context) {
super.onAttach(context);
if (getParentFragment() instanceof UpdateGistCallback) {
updateGistCallback = (UpdateGistCallback) getParentFragment();
} else if (context instanceof UpdateGistCallback) {
updateGistCallback = (UpdateGistCallback) context;
}
}
@Override public void onDetach() {
updateGistCallback = null;
super.onDetach();
}
@Override protected int fragmentLayout() {
return R.layout.small_grid_refresh_list;
}
@ -58,6 +77,7 @@ public class GistFilesListFragment extends BaseFragment<GistFilesListMvp.View, G
@Override protected void onFragmentCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
ArrayList<FilesListModel> filesListModel = getArguments().getParcelableArrayList(BundleConstant.ITEM);
boolean isOwner = getArguments().getBoolean(BundleConstant.EXTRA_TYPE);
stateLayout.hideReload();
stateLayout.setEmptyText(R.string.no_files);
recycler.setEmptyView(stateLayout);
@ -66,25 +86,31 @@ public class GistFilesListFragment extends BaseFragment<GistFilesListMvp.View, G
return;
}
if (!filesListModel.isEmpty()) {
recycler.setAdapter(new GistFilesAdapter(filesListModel, getPresenter()));
adapter = new GistFilesAdapter(filesListModel, getPresenter(), isOwner);
recycler.setAdapter(adapter);
}
fastScroller.attachRecyclerView(recycler);
}
@Override public void onOpenFile(@NonNull FilesListModel item) {
if (item.getRawUrl() != null) {
if (item.getSize() > FileHelper.ONE_MB && !MarkDownProvider.isImage(item.getRawUrl())) {
MessageDialogView.newInstance(getString(R.string.big_file), getString(R.string.big_file_description), false, true,
Bundler.start().put(BundleConstant.YES_NO_EXTRA, true).put(BundleConstant.EXTRA, item.getRawUrl()).end())
.show(getChildFragmentManager(), "MessageDialogView");
} else {
CodeViewerActivity.startActivity(getContext(), item.getRawUrl(), item.getRawUrl());
}
} else {
showErrorMessage(getString(R.string.no_url));
if (canOpen(item)) {
CodeViewerActivity.startActivity(getContext(), item.getRawUrl(), item.getRawUrl());
}
}
@Override public void onDeleteFile(@NonNull FilesListModel item, int position) {
MessageDialogView.newInstance(getString(R.string.delete), getString(R.string.confirm_message), false,
Bundler.start()
.put(BundleConstant.ID, position)
.put(BundleConstant.YES_NO_EXTRA, true)
.end())
.show(getChildFragmentManager(), MessageDialogView.TAG);
}
@Override public void onEditFile(@NonNull FilesListModel item, int position) {
}
@Override public void onMessageDialogActionClicked(boolean isOk, @Nullable Bundle bundle) {
super.onMessageDialogActionClicked(isOk, bundle);
if (isOk && bundle != null) {
@ -93,6 +119,15 @@ public class GistFilesListFragment extends BaseFragment<GistFilesListMvp.View, G
if (ActivityHelper.checkAndRequestReadWritePermission(getActivity())) {
RestProvider.downloadFile(getContext(), url);
}
} else if (bundle.getBoolean(BundleConstant.YES_NO_EXTRA)) {
if (adapter != null) {
int position = bundle.getInt(BundleConstant.ID);
String filename = adapter.getItem(position).getFilename();
adapter.removeItem(position);
if (updateGistCallback != null) {
updateGistCallback.onUpdateGist(adapter.getData(), filename);
}
}
}
}
}
@ -101,4 +136,15 @@ public class GistFilesListFragment extends BaseFragment<GistFilesListMvp.View, G
super.onScrollTop(index);
if (recycler != null) recycler.scrollToPosition(0);
}
private boolean canOpen(@NonNull FilesListModel item) {
if (item.getRawUrl() == null) return false;
if (item.getSize() > FileHelper.ONE_MB && !MarkDownProvider.isImage(item.getRawUrl())) {
MessageDialogView.newInstance(getString(R.string.big_file), getString(R.string.big_file_description), false, true,
Bundler.start().put(BundleConstant.YES_NO_EXTRA, true).put(BundleConstant.EXTRA, item.getRawUrl()).end())
.show(getChildFragmentManager(), "MessageDialogView");
return false;
}
return true;
}
}

View File

@ -6,15 +6,25 @@ import com.fastaccess.data.dao.FilesListModel;
import com.fastaccess.ui.base.mvp.BaseMvp;
import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder;
import java.util.List;
/**
* Created by Kosh on 13 Nov 2016, 1:35 PM
*/
interface GistFilesListMvp {
public interface GistFilesListMvp {
interface View extends BaseMvp.FAView {
void onOpenFile(@NonNull FilesListModel item);
void onDeleteFile(@NonNull FilesListModel item, int position);
void onEditFile(@NonNull FilesListModel item, int position);
}
interface Presenter extends BaseMvp.FAPresenter, BaseViewHolder.OnItemClickListener<FilesListModel> {}
interface UpdateGistCallback {
void onUpdateGist(@NonNull List<FilesListModel> files, @NonNull String filename);
}
}

View File

@ -2,6 +2,7 @@ package com.fastaccess.ui.modules.gists.gist.files;
import android.view.View;
import com.fastaccess.R;
import com.fastaccess.data.dao.FilesListModel;
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
@ -12,7 +13,15 @@ import com.fastaccess.ui.base.mvp.presenter.BasePresenter;
class GistFilesListPresenter extends BasePresenter<GistFilesListMvp.View> implements GistFilesListMvp.Presenter {
@Override public void onItemClick(int position, View v, FilesListModel item) {
if (getView() != null) getView().onOpenFile(item);
if (getView() != null) {
if (v.getId() == R.id.delete) {
getView().onDeleteFile(item, position);
} else if (v.getId() == R.id.edit) {
getView().onEditFile(item, position);
} else {
getView().onOpenFile(item);
}
}
}
@Override public void onItemLongClick(int position, View v, FilesListModel item) {}

View File

@ -7,6 +7,7 @@ import android.support.design.widget.CoordinatorLayout
import android.support.transition.TransitionManager
import android.view.View
import android.widget.RelativeLayout
import butterknife.BindView
import butterknife.OnClick
import com.fastaccess.BuildConfig
import com.fastaccess.R
@ -18,7 +19,6 @@ import com.fastaccess.ui.base.BaseActivity
import com.fastaccess.ui.modules.login.LoginActivity
import com.fastaccess.ui.modules.main.premium.PremiumActivity
import com.fastaccess.ui.modules.settings.LanguageBottomSheetDialog
import com.fastaccess.ui.widgets.bindView
import com.fastaccess.ui.widgets.dialog.MessageDialogView
import com.fastaccess.ui.widgets.recyclerview.DynamicRecyclerView
import io.reactivex.functions.Action
@ -30,11 +30,12 @@ import java.util.*
class LoginChooserActivity : BaseActivity<LoginChooserMvp.View, LoginChooserPresenter>(), LoginChooserMvp.View {
private val language_selector: RelativeLayout by bindView(R.id.language_selector)
private val recycler: DynamicRecyclerView by bindView(R.id.recycler)
private val multiAccLayout: View by bindView(R.id.multiAccLayout)
private val viewGroup: CoordinatorLayout by bindView(R.id.viewGroup)
private val toggleImage: View by bindView(R.id.toggleImage)
@BindView(R.id.language_selector) lateinit var language_selector: RelativeLayout
@BindView(R.id.recycler) lateinit var recycler: DynamicRecyclerView
@BindView(R.id.multiAccLayout) lateinit var multiAccLayout: View
@BindView(R.id.viewGroup) lateinit var viewGroup: CoordinatorLayout
@BindView(R.id.toggleImage) lateinit var toggleImage: View
private val adapter = LoginAdapter()
override fun layout(): Int = R.layout.login_chooser_layout

View File

@ -7,6 +7,7 @@ import android.support.transition.TransitionManager
import android.view.View
import android.widget.EditText
import android.widget.FrameLayout
import butterknife.BindView
import butterknife.OnClick
import butterknife.OnEditorAction
import com.crashlytics.android.answers.Answers
@ -19,16 +20,15 @@ import com.fastaccess.helper.PrefGetter
import com.fastaccess.helper.ViewHelper
import com.fastaccess.ui.base.BaseActivity
import com.fastaccess.ui.modules.main.donation.DonateActivity
import com.fastaccess.ui.widgets.bindView
/**
* Created by kosh on 13/07/2017.
*/
class PremiumActivity : BaseActivity<PremiumMvp.View, PremiumPresenter>(), PremiumMvp.View {
private val editText: EditText by bindView(R.id.editText)
private val progressLayout: View by bindView(R.id.progressLayout)
private val viewGroup: FrameLayout by bindView(R.id.viewGroup)
@BindView(R.id.editText) lateinit var editText: EditText
@BindView(R.id.viewGroup) lateinit var viewGroup: FrameLayout
@BindView(R.id.progressLayout) lateinit var progressLayout: FrameLayout
override fun layout(): Int = R.layout.pro_features_layout

View File

@ -4,6 +4,7 @@ import android.content.Context
import android.os.Bundle
import android.support.v4.widget.SwipeRefreshLayout
import android.view.View
import butterknife.BindView
import com.fastaccess.R
import com.fastaccess.data.dao.BranchesModel
import com.fastaccess.helper.BundleConstant
@ -20,10 +21,12 @@ import com.fastaccess.ui.widgets.recyclerview.scroll.RecyclerViewFastScroller
* Created by Kosh on 06 Jul 2017, 9:48 PM
*/
class BranchesFragment : BaseFragment<BranchesMvp.View, BranchesPresenter>(), BranchesMvp.View {
private val recycler: DynamicRecyclerView by lazy { view!!.findViewById<DynamicRecyclerView>(R.id.recycler) }
private val refresh: SwipeRefreshLayout by lazy { view!!.findViewById<SwipeRefreshLayout>(R.id.refresh) }
private val stateLayout: StateLayout by lazy { view!!.findViewById<StateLayout>(R.id.stateLayout) }
private val fastScroller: RecyclerViewFastScroller by lazy { view!!.findViewById<RecyclerViewFastScroller>(R.id.fastScroller) }
@BindView(R.id.recycler) lateinit var recycler: DynamicRecyclerView
@BindView(R.id.refresh) lateinit var refresh: SwipeRefreshLayout
@BindView(R.id.stateLayout) lateinit var stateLayout: StateLayout
@BindView(R.id.fastScroller) lateinit var fastScroller: RecyclerViewFastScroller
private var onLoadMore: OnLoadMore<Boolean>? = null
private var branchCallback: BranchesPagerListener? = null

View File

@ -6,6 +6,7 @@ import android.support.design.widget.TabLayout
import android.support.v4.view.ViewPager
import android.support.v7.widget.Toolbar
import android.view.View
import butterknife.BindView
import com.fastaccess.R
import com.fastaccess.data.dao.BranchesModel
import com.fastaccess.data.dao.FragmentPagerAdapterModel
@ -21,9 +22,11 @@ import com.fastaccess.ui.modules.repos.extras.branches.BranchesMvp
* Created by kosh on 15/07/2017.
*/
class BranchesPagerFragment : BaseDialogFragment<BaseMvp.FAView, BasePresenter<BaseMvp.FAView>>(), BranchesPagerListener {
private val pager: ViewPager by lazy { view!!.findViewById<ViewPager>(R.id.pager) }
private val tabs: TabLayout by lazy { view!!.findViewById<TabLayout>(R.id.tabs) }
private val toolbar: Toolbar by lazy { view!!.findViewById<Toolbar>(R.id.toolbar) }
@BindView(R.id.pager) lateinit var pager: ViewPager
@BindView(R.id.tabs) lateinit var tabs: TabLayout
@BindView(R.id.toolbar) lateinit var toolbar: Toolbar
private var branchCallback: BranchesMvp.BranchSelectionListener? = null
override fun onAttach(context: Context) {

View File

@ -5,6 +5,7 @@ import android.support.annotation.StringRes
import android.view.View
import android.widget.ProgressBar
import android.widget.TextView
import butterknife.BindView
import com.evernote.android.state.State
import com.fastaccess.R
import com.fastaccess.helper.BundleConstant
@ -22,11 +23,10 @@ class RepoLicenseBottomSheet : BaseMvpBottomSheetDialogFragment<RepoLicenseMvp.V
@State var content: String? = null
private val stateLayout: StateLayout by lazy { view!!.findViewById<StateLayout>(R.id.stateLayout) }
private val loader: ProgressBar by lazy { view!!.findViewById<ProgressBar>(R.id.readmeLoader) }
private val webView: PrettifyWebView by lazy { view!!.findViewById<PrettifyWebView>(R.id.webView) }
private val licenseName: TextView by lazy { view!!.findViewById<TextView>(R.id.licenseName) }
@BindView(R.id.stateLayout) lateinit var stateLayout: StateLayout
@BindView(R.id.readmeLoader) lateinit var loader: ProgressBar
@BindView(R.id.webView) lateinit var webView: PrettifyWebView
@BindView(R.id.licenseName) lateinit var licenseName: TextView
override fun providePresenter(): RepoLicensePresenter = RepoLicensePresenter()

View File

@ -11,6 +11,7 @@ import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.ProgressBar
import butterknife.BindView
import com.evernote.android.state.State
import com.fastaccess.R
import com.fastaccess.data.dao.NameParser
@ -22,7 +23,6 @@ import com.fastaccess.provider.scheme.LinkParserHelper
import com.fastaccess.ui.base.BaseActivity
import com.fastaccess.ui.modules.repos.RepoPagerActivity
import com.fastaccess.ui.widgets.StateLayout
import com.fastaccess.ui.widgets.bindView
import com.prettifier.pretty.PrettifyWebView
/**
@ -30,12 +30,11 @@ import com.prettifier.pretty.PrettifyWebView
*/
class WikiActivity : BaseActivity<WikiMvp.View, WikiPresenter>(), WikiMvp.View {
private val navMenu: NavigationView by bindView(R.id.wikiSidebar)
private val drawerLayout: DrawerLayout by bindView(R.id.drawer)
private val progressbar: ProgressBar by bindView(R.id.progress)
private val stateLayout: StateLayout by bindView(R.id.stateLayout)
private val webView: PrettifyWebView by bindView(R.id.webView)
@BindView(R.id.wikiSidebar) lateinit var navMenu: NavigationView
@BindView(R.id.drawer) lateinit var drawerLayout: DrawerLayout
@BindView(R.id.progress) lateinit var progressbar: ProgressBar
@BindView(R.id.stateLayout) lateinit var stateLayout: StateLayout
@BindView(R.id.webView) lateinit var webView: PrettifyWebView
@State var wiki = WikiContentModel(null, null, arrayListOf())
@State var selectedTitle: String = "Home"

View File

@ -8,6 +8,7 @@ import android.support.v4.content.ContextCompat
import android.support.v7.widget.Toolbar
import android.view.View
import android.widget.TextView
import butterknife.BindView
import com.fastaccess.R
import com.fastaccess.data.dao.CommitLinesModel
import com.fastaccess.helper.BundleConstant
@ -25,10 +26,11 @@ import com.fastaccess.ui.widgets.SpannableBuilder
*/
class AddReviewDialogFragment : BaseDialogFragment<BaseMvp.FAView, BasePresenter<BaseMvp.FAView>>() {
private val toolbar: Toolbar by lazy { view!!.findViewById<Toolbar>(R.id.toolbar) }
private val textView: TextView by lazy { view!!.findViewById<TextView>(R.id.text) }
private val lineNo: TextView by lazy { view!!.findViewById<TextView>(R.id.lineNo) }
private val editText: TextInputLayout by lazy { view!!.findViewById<TextInputLayout>(R.id.editText) }
@BindView(R.id.toolbar) lateinit var toolbar: Toolbar
@BindView(R.id.text) lateinit var textView: TextView
@BindView(R.id.lineNo) lateinit var lineNo: TextView
@BindView(R.id.editText) lateinit var editText: TextInputLayout
private val spacePattern = "\\s+".toRegex()
private var commentCallback: ReviewCommentListener? = null

View File

@ -10,13 +10,13 @@ import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.Spinner
import butterknife.BindView
import com.evernote.android.state.State
import com.fastaccess.R
import com.fastaccess.data.dao.ReviewRequestModel
import com.fastaccess.helper.*
import com.fastaccess.provider.theme.ThemeEngine
import com.fastaccess.ui.base.BaseActivity
import com.fastaccess.ui.widgets.bindView
import com.fastaccess.ui.widgets.dialog.ProgressDialogFragment
/**
@ -25,9 +25,9 @@ import com.fastaccess.ui.widgets.dialog.ProgressDialogFragment
class ReviewChangesActivity : BaseActivity<ReviewChangesMvp.View, ReviewChangesPresenter>(), ReviewChangesMvp.View {
val toolbar: Toolbar by bindView(R.id.toolbar)
private val spinner: Spinner by bindView(R.id.reviewMethod)
private val editText: TextInputLayout by bindView(R.id.editText)
@BindView(R.id.toolbar) lateinit var toolbar: Toolbar
@BindView(R.id.reviewMethod) lateinit var spinner: Spinner
@BindView(R.id.editText) lateinit var editText: TextInputLayout
@State var reviewRequest: ReviewRequestModel? = null
@State var repoId: String? = null

View File

@ -9,6 +9,7 @@ import android.view.ViewGroup
import android.widget.Button
import android.widget.RadioButton
import android.widget.RadioGroup
import butterknife.BindView
import com.fastaccess.R
import com.fastaccess.data.dao.NotificationSoundModel
import com.fastaccess.helper.BundleConstant
@ -22,9 +23,10 @@ import com.fastaccess.ui.widgets.FontTextView
class NotificationSoundBottomSheet : BaseMvpBottomSheetDialogFragment<NotificationSoundMvp.View,
NotificationSoundPresenter>(), NotificationSoundMvp.View {
private val title: FontTextView by lazy { view!!.findViewById<FontTextView>(R.id.title) }
private val radioGroup: RadioGroup by lazy { view!!.findViewById<RadioGroup>(R.id.picker) }
private val okButton: Button by lazy { view!!.findViewById<Button>(R.id.ok) }
@BindView(R.id.title) lateinit var title: FontTextView
@BindView(R.id.picker) lateinit var radioGroup: RadioGroup
@BindView(R.id.ok) lateinit var okButton: Button
private val padding: Int by lazy { resources.getDimensionPixelSize(R.dimen.spacing_xs_large) }
private var canPlaySound: Boolean = false
private val mediaPlayer = MediaPlayer()

View File

@ -6,6 +6,7 @@ import android.os.Build
import android.os.Bundle
import android.view.View
import android.view.ViewAnimationUtils
import butterknife.BindView
import com.fastaccess.R
import com.fastaccess.data.dao.FragmentPagerAdapterModel
import com.fastaccess.helper.PrefGetter
@ -16,7 +17,6 @@ import com.fastaccess.ui.base.mvp.presenter.BasePresenter
import com.fastaccess.ui.modules.theme.fragment.ThemeFragmentMvp
import com.fastaccess.ui.widgets.CardsPagerTransformerBasic
import com.fastaccess.ui.widgets.ViewPagerView
import com.fastaccess.ui.widgets.bindView
/**
@ -25,8 +25,8 @@ import com.fastaccess.ui.widgets.bindView
class ThemeActivity : BaseActivity<BaseMvp.FAView, BasePresenter<BaseMvp.FAView>>(), ThemeFragmentMvp.ThemeListener {
private val pager: ViewPagerView by bindView(R.id.pager)
private val parentLayout: View by bindView(R.id.parentLayout)
@BindView(R.id.pager) lateinit var pager: ViewPagerView
@BindView(R.id.parentLayout) lateinit var parentLayout: View
override fun layout(): Int = R.layout.theme_viewpager

View File

@ -5,13 +5,13 @@ import android.os.Bundle
import android.view.View
import android.widget.ProgressBar
import android.widget.Spinner
import butterknife.BindView
import butterknife.OnClick
import butterknife.OnItemSelected
import com.fastaccess.R
import com.fastaccess.helper.PrefGetter
import com.fastaccess.ui.adapter.SpinnerAdapter
import com.fastaccess.ui.base.BaseActivity
import com.fastaccess.ui.widgets.bindView
import com.prettifier.pretty.PrettifyWebView
import com.prettifier.pretty.helper.CodeThemesHelper
@ -21,9 +21,9 @@ import com.prettifier.pretty.helper.CodeThemesHelper
class ThemeCodeActivity : BaseActivity<ThemeCodeMvp.View, ThemeCodePresenter>(), ThemeCodeMvp.View {
private val spinner: Spinner by bindView(R.id.themesList)
private val webView: PrettifyWebView by bindView(R.id.webView)
private val progress: ProgressBar? by bindView(R.id.readmeLoader)
@BindView(R.id.themesList) lateinit var spinner: Spinner
@BindView(R.id.webView) lateinit var webView: PrettifyWebView
@BindView(R.id.readmeLoader) lateinit var progress: ProgressBar
override fun layout(): Int = R.layout.theme_code_layout
@ -49,20 +49,20 @@ class ThemeCodeActivity : BaseActivity<ThemeCodeMvp.View, ThemeCodePresenter>(),
@OnItemSelected(R.id.themesList) fun onItemSelect() {
val theme = spinner.selectedItem as String
progress?.visibility = View.VISIBLE
progress.visibility = View.VISIBLE
webView.setThemeSource(CodeThemesHelper.CODE_EXAMPLE, theme)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
progress?.visibility = View.VISIBLE
progress.visibility = View.VISIBLE
webView.setOnContentChangedListener(this)
title = ""
presenter.onLoadThemes()
}
override fun onContentChanged(p: Int) {
progress?.let {
progress.let {
it.progress = p
if (p == 100) it.visibility = View.GONE
}

View File

@ -11,6 +11,8 @@ import android.view.ContextThemeWrapper
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ProgressBar
import butterknife.BindView
import com.fastaccess.R
import com.fastaccess.helper.*
import com.fastaccess.ui.base.BaseFragment
@ -23,8 +25,8 @@ import com.fastaccess.ui.widgets.SpannableBuilder
class ThemeFragment : BaseFragment<ThemeFragmentMvp.View, ThemeFragmentPresenter>(), ThemeFragmentMvp.View {
private val apply: FloatingActionButton by lazy { view!!.findViewById<FloatingActionButton>(R.id.apply) }
private val toolbar: Toolbar by lazy { view!!.findViewById<Toolbar>(R.id.toolbar) }
@BindView(R.id.apply) lateinit var apply: FloatingActionButton
@BindView(R.id.toolbar) lateinit var toolbar: Toolbar
private val THEME = "appTheme"
private var primaryDarkColor: Int = 0

View File

@ -15,6 +15,7 @@ import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.widget.TextView
import butterknife.BindView
import butterknife.OnClick
import butterknife.OnEditorAction
import butterknife.OnTextChanged
@ -25,7 +26,6 @@ import com.fastaccess.ui.base.BaseActivity
import com.fastaccess.ui.modules.main.MainActivity
import com.fastaccess.ui.modules.trending.fragment.TrendingFragment
import com.fastaccess.ui.widgets.FontEditText
import com.fastaccess.ui.widgets.bindView
/**
@ -35,13 +35,13 @@ import com.fastaccess.ui.widgets.bindView
class TrendingActivity : BaseActivity<TrendingMvp.View, TrendingPresenter>(), TrendingMvp.View {
private var trendingFragment: TrendingFragment? = null
private val navMenu: NavigationView by bindView(R.id.navMenu)
private val daily: TextView by bindView(R.id.daily)
private val weekly: TextView by bindView(R.id.weekly)
private val monthly: TextView by bindView(R.id.monthly)
private val drawerLayout: DrawerLayout by bindView(R.id.drawer)
private val clear: View by bindView(R.id.clear)
private val searchEditText: FontEditText by bindView(R.id.searchEditText)
@BindView(R.id.navMenu) lateinit var navMenu: NavigationView
@BindView(R.id.daily) lateinit var daily: TextView
@BindView(R.id.weekly) lateinit var weekly: TextView
@BindView(R.id.monthly) lateinit var monthly: TextView
@BindView(R.id.drawer) lateinit var drawerLayout: DrawerLayout
@BindView(R.id.clear) lateinit var clear: View
@BindView(R.id.searchEditText) lateinit var searchEditText: FontEditText
@State var selectedTitle: String = "All Language"
@ -112,14 +112,14 @@ class TrendingActivity : BaseActivity<TrendingMvp.View, TrendingPresenter>(), Tr
if (savedInstanceState == null) {
presenter.onLoadLanguage()
} else {
Handler().postDelayed({
Logger.e(searchEditText.text)
if (InputHelper.isEmpty(searchEditText)) { //searchEditText.text is always empty even tho there is a text in it !!!!!!!
presenter.onLoadLanguage()
} else {
presenter.onFilterLanguage(InputHelper.toString(searchEditText))
}
}, 300)
Handler().postDelayed({
Logger.e(searchEditText.text)
if (InputHelper.isEmpty(searchEditText)) { //searchEditText.text is always empty even tho there is a text in it !!!!!!!
presenter.onLoadLanguage()
} else {
presenter.onFilterLanguage(InputHelper.toString(searchEditText))
}
}, 300)
}
onSelectTrending()
}

View File

@ -3,6 +3,7 @@ package com.fastaccess.ui.modules.trending.fragment
import android.os.Bundle
import android.support.v4.widget.SwipeRefreshLayout
import android.view.View
import butterknife.BindView
import com.evernote.android.state.State
import com.fastaccess.R
import com.fastaccess.data.dao.TrendingModel
@ -18,22 +19,19 @@ import com.fastaccess.ui.widgets.recyclerview.scroll.RecyclerViewFastScroller
class TrendingFragment : BaseFragment<TrendingFragmentMvp.View, TrendingFragmentPresenter>(), TrendingFragmentMvp.View {
private val recycler: DynamicRecyclerView by lazy { view!!.findViewById<DynamicRecyclerView>(R.id.recycler) }
private val refresh: SwipeRefreshLayout by lazy { view!!.findViewById<SwipeRefreshLayout>(R.id.refresh) }
private val stateLayout: StateLayout by lazy { view!!.findViewById<StateLayout>(R.id.stateLayout) }
private val fastScroller: RecyclerViewFastScroller by lazy { view!!.findViewById<RecyclerViewFastScroller>(R.id.fastScroller) }
@BindView(R.id.recycler) lateinit var recycler: DynamicRecyclerView
@BindView(R.id.refresh) lateinit var refresh: SwipeRefreshLayout
@BindView(R.id.stateLayout) lateinit var stateLayout: StateLayout
@BindView(R.id.fastScroller) lateinit var fastScroller: RecyclerViewFastScroller
private val adapter by lazy { TrendingAdapter(presenter.getTendingList()) }
@State var lang: String = ""
@State var since: String = ""
override fun providePresenter(): TrendingFragmentPresenter {
return TrendingFragmentPresenter()
}
override fun providePresenter(): TrendingFragmentPresenter = TrendingFragmentPresenter()
override fun fragmentLayout(): Int {
return R.layout.small_grid_refresh_list
}
override fun fragmentLayout(): Int = R.layout.small_grid_refresh_list
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
stateLayout.setEmptyText(R.string.no_trending)

View File

@ -6,18 +6,18 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/spacing_micro"
android:foreground="?attr/selectableItemBackground"
android:foreground="?selectableItemBackground"
android:stateListAnimator="@animator/cardview_selector"
app:cardBackgroundColor="?card_background">
app:cardBackgroundColor="?card_background"
app:contentPaddingBottom="@dimen/spacing_normal"
app:contentPaddingLeft="@dimen/spacing_xs_large"
app:contentPaddingRight="@dimen/spacing_xs_large"
app:contentPaddingTop="@dimen/spacing_normal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="@dimen/spacing_normal"
android:paddingEnd="@dimen/spacing_xs_large"
android:paddingStart="@dimen/spacing_xs_large"
android:paddingTop="@dimen/spacing_normal">
android:orientation="vertical">
<com.fastaccess.ui.widgets.FontTextView
android:id="@+id/fileName"
@ -41,6 +41,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:background="@drawable/right_border"
android:textColor="?android:attr/textColorSecondary"
tools:text="JAVASCRIPT"/>
@ -51,12 +52,28 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="0.4"
android:background="@drawable/left_border"
android:background="@drawable/right_border"
android:gravity="center"
android:paddingEnd="@dimen/spacing_normal"
android:paddingStart="@dimen/spacing_normal"
android:textColor="?android:attr/textColorSecondary"
tools:text="500 KB"/>
<com.fastaccess.ui.widgets.ForegroundImageView
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?selectableItemBackgroundBorderless"
android:padding="@dimen/spacing_micro"
android:src="@drawable/ic_trash"/>
<com.fastaccess.ui.widgets.ForegroundImageView
android:id="@+id/edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?selectableItemBackgroundBorderless"
android:padding="@dimen/spacing_micro"
android:src="@drawable/ic_edit"/>
</LinearLayout>
</LinearLayout>